Есть модульный код построенный на классах. Есть главный класс рекварит все другие модули и создает объекты на основе этих классов.Цепочка вызовов большая. Делал все на await\async. Но в одном участке кода все проскакивает, await не работает. Есть две функции которые находятся почти рядом с друг другом:
await isNew();
/*
Code
*/
await prepeare();
В первом случае когда в обоих этих функциях не было промиса, код работы с базой данных пропускался переходило все к «Метке 2» и завершало работу. База была 0кб.
Во втором случае я в функцию prepare добавил promise на участок с запросами к БД. Код останавливается на «Метке 1».
После я еще добавил promise, в функцию isNew(). И теперь функция Prepare вообще не выполняется. Да что уж там сама функция isNew() не до конца выполняется. Программа завершает свою работу.
На этом моменте я понял что перестал что-то понимать… Кто нибудь объясните пожалуйста, как заставить работать программу нормально, без этих попрыгунчиков а как в нормальных языках последовательно. Не предлагайте сменить язык, это последний проект на JS, больше я к нему не вернусь. Спасибо!
async isNew() {
let res = false;
let deDB = this.deDB;
await new Promise((resolve, reject) => {
deDB.each("SELECT id, dt FROM meta", function(err, row) {
console.log(err);
if (err)
res = true;
//console.log("User id : "+row.id, row.dt);
});
});
console.log('res is ' + res);
return res;
}
async prepare() {
let sSql = new Array();
let deDB = this.deDB;
await new Promise((resolve, reject) => {
deDB.serialize(async function() {
deDB.run("CREATE TABLE meta (id INT, dt TEXT)");
deDB.run("CREATE TABLE lorem (info TEXT)");
console.log('i am in prepare');
let stmt = deDB.prepare("INSERT INTO lorem VALUES (?)");
for (let i = 0; i < 10; i++) {
await stmt.run("Ipsum " + i);
}
stmt.finalize();
console.log('Метка 1');
});
});
console.log('Метка 2');
await deDB.close((err) => {
if (err) {
return console.error(err.message);
}
console.log('Close the database connection.');
}
)
console.log('Метка 3');
return true;
}