Зачем ждать новое обещание вызывает немедленный выход? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть очень простые сценарии, в которых мне нужно подождать несколько секунд, прежде чем выполнять дальнейшее выполнение.

Я пытался установить функцию тайм-аута отдельно, экспортируя только модуль или функцию. кажется, ничего не работает.

module.exports.tests = async () => {
console.log("inside test function")
await new Promise(async (resolve: any) => {
    setTimeout(resolve, 5000);
  });

// Do actual work
console.log("Starting actual work");

}

Когда я вызываю эту функцию

./node_modules/.bin/ts-node -e 'require(\"./src/tests.ts\").tests()

Я ожидаю, что это напечатает «Начало фактической работы», но оно там никогда не дойдет. Он печатает «внутри тестовой функции» и возвращает перед вызовом фактической работы. Что, возможно, я здесь не так делаю?

1 Ответ

0 голосов
/ 15 мая 2019

await - это то, что блокирует вас.

await/async используются для более простого выполнения обещаний.

Что вы говорите на языке:

- print "inside test function"
- wait for this promise to resolve and return me the value it returns
- print "Starting actual work"

но поскольку ваше обещание разрешается через 5 секунд, вторая строка не будет напечатана, если не через 5 секунд.

Пример будет работать ожидаемо, если вы напишите это:

module.exports.tests = async () => {
    console.log("inside test function")
    (new Promise((resolve: any) => {
        setTimeout(resolve, 5000);
     })).then(() => console.log("printed after 5 seconds"));
    // Do actual work
    console.log("Starting actual work");
}

Вот скрипка , чтобы посмотреть, как она работает.

...