-2

我有非常简单的案例场景,我需要等待几秒钟才能进一步执行。

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

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()

我希望这会打印“开始实际工作”,但它永远不会到达那里。它正在打印“内部测试功能”并在调用实际工作之前返回。我在这里做错了什么?

4

1 回答 1

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

这是一个小提琴,看看它是如何工作的。

于 2019-05-15T14:38:38.623 回答