Я думаю, что вы должны использовать только 1 вещь: Promise или Async / Await.
1] Пример Async / Await
async function main() {
const tr = new Trigger();
console.log('run');
tr.run();
await tr.waitUntilDone();
console.log('Promise done');
tr.run();
await tr.waitUntilDone();
console.log('Promise done')
console.log('final done');
}
2] Пример обещания
function main() {
const tr = new Trigger();
console.log('run');
tr.run();
tr.waitUntilDone().then(() => console.log('Promise done'));
tr.waitUntilDone().then(() => console.log('Promise done'));
console.log('final done');
}
Ваше выражение "await tr.waitUntilDone().then(() => console.log('Promise done'));
" неверно. Правильным будет что-то вроде этого "await tr.waitUntilDone().then(() => (console.log('Promise done'), Promise.resolve()));
" или "tr.waitUntilDone().then(() => console.log('Promise done'));
"