Доброго дня! Пытаюсь заставить работать свой код как я его написал.
Есть цепочка вызовов:
module1.init()->module1.getProjectStatus()->module2.isNew(); Естественно все через await\async
Чтобы код отработал хоть немного так как написал я вынужден вставлять async\await функции обертки.
Проблема в том что он пропускает функцию isNew() например, в итоге переменная остается не про инициализированной, выполняет ее в конце, а мне нужно в начале.
Раньше писал на Prototype -> function и вообще проблем не было с асинхронностью, ставил await и будет ждать. Говонокод но работал. А тут решил идти в ногу со временем, на классах все реализовал, конструкторах код сладкий но работает как хочет.
Может эти сахарные конструкции ввиде constructor - class межают реализации await?
Вот пример кода:
let pState = false;
await (async () => {
pState = await this.getProjectStatus();
console.log('pState is getProjectStatus' + pState);
return;
})();
console.log('pState is ' + pState);
if (pState == 'new')
await this.prepare();
Пример кода с классом, не знаю зачем.
class SuperClass {
constructor (settings) {
if (!this.isCorrectSettings())
console.log('Settings is incorect');
let defaultSettings = {
MAX_UPDATE_TIME: 5, //hours
PRG_WORK_DIR: __dirname,
PROJECT_DIR: __dirname,
};
this.settings = Object.assign(defaultSettings, settings);
//T-200
}
async init() {
await this.initPaths();
await this.initModules();
await this.initVars();
Проблемный код, функция для работы базыданных выполняеться в самом конце программы а должна выполняться первой.
isNew() {
let res = false;
let deDB = this.deDB;
let fd = deDB.run("SELECT id, dt FROM meta", function(err) {
if (err)
res = true;
console.trace('Step1');
});
console.trace('Step2 ' + res);
return res;
}
Я поставил метки в коде, вот собственно вывод. Step1 в конце, а должне быть в начале. Step6 вообще нет.
Step2 false
Step3 false
Step4 contunue
Step5 contunue
End of test - O213k4
getArrayRows - Error ads
getArrayRows - Error matrix
getArrayRows - Error meta
Step1