Как сказал @ Chiến Nghê, вы используете некоторую асинхронность / ожидание, когда в этом нет необходимости, но это другая проблема.
Ваше ожидание не работает в конце, потому что ваша функция стока вызывается наконец вашей очереди, и он не возвращает обещание.
Вы должны обещать свою функцию, вот пример, чтобы сделать это:
function end() {
return new Promise((resolve, reject) => {
myQueue.drain = function () {
console.log('The queue is now empty.');
resolve();
};
})
}
И затем вы можете использовать свой асинхронный ожидание в вашей конечной функции:
(async () => {
console.log('START');
run();
await end();
console.log('END');
})()
Вывод:
START
// a lot of logs
END