我有非常简单的案例方案,在执行进一步执行之前,我需要等待几秒钟。
我试图单独设置超时功能,仅导出模块或功能。似乎没有任何作用。
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()
我希望这会打印“开始实际工作”,但是它永远不会到达那里。它正在打印“内部测试功能”并在调用实际工作之前返回。我可能在这里做错了什么?
答案 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了解其工作原理。