Для каждой из функций от t1()
до t5()
вам необходимо убедиться, что они возвращают Promise
, так что возвращаемое обещание "разрешается" после завершения соответствующего таймера setTimeout()
внутри.
Возвращая объект Promise
таким способом, ваши t1()
-> t5()
функции эффективно становятся async
методами, что, в свою очередь, означает, что префикс await
приведет к выполнению main()
дляблокировать до тех пор, пока каждая t1()
-> t5()
функция не будет завершена (или «разрешена»).
Чтобы проиллюстрировать это, рассмотрим следующий код, в котором общая функция delay()
заменяет t1()
->t5()
функции в вашем исходном коде:
/* I've defined a generic delay function as replacement
for t1 - t5 functions to minimise the amount of code */
function delay(seconds) {
/* Return a promise object that will cause the
await to prevent main() async function's execution
from continuing until this promise has resolved */
return (new Promise((resolve) => {
/* Inside the promise, set your time out */
setTimeout(() => {
console.log(seconds)
/* When time out complete, call resolve(), which
resolves this promise and allows main() async
function's execution to continue */
resolve()
}, seconds * 1000);
}))
}
async function main() {
await delay(1);
console.log("1sec done");
await delay(2);
console.log("2sec done");
await delay(3);
console.log("3sec done");
await delay(4);
console.log("4sec done");
await delay(5);
console.log("Yay! I am all done");
}
main();