为什么要等待新的Promise导致立即退出?

时间:2019-05-15 14:29:08

标签: node.js typescript promise es6-promise ts-node

我有非常简单的案例方案,在执行进一步执行之前,我需要等待几秒钟。

我试图单独设置超时功能,仅导出模块或功能。似乎没有任何作用。

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 :(得分:-2)

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");
}

Here a fiddle了解其工作原理。