node.js - await setTimeout 没有同步等待
问题描述
我知道这setTimeout
是一个异步运行的 API,我想同步运行它。像下面这样使用async/await
应该首先打印bla bla
,但我bla
首先得到。
async function testing(){
console.log("testing function has been triggered");
await setTimeout(function () {
console.log("bla bla")
}, 4200)
console.log("bla");
}
解决方案
setTimeout
不返回 a Promise
,所以你不能await
。
您可以包装setTimeout
一个函数,该函数返回 a Promise
,一旦计时器到期,该函数就会完成。您可以await
使用此包装器功能。
function createCustomTimeout(seconds) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('bla bla');
resolve();
}, seconds * 1000);
});
}
async function testing() {
console.log('testing function has been triggered');
await createCustomTimeout(4);
console.log('bla');
}
testing();
推荐阅读
- classification - weka中的通过/失败学校成绩二进制分类
- javascript - 删除一个类,然后将其添加回来会导致不同的显示
- swift - 使用视图模型与在视图本身中使用 @Binding 时如何使用绑定?
- reactjs - 反应使用上下文。无法解构“对象(...)(...)”的属性“currentChatbotInEdit”,因为它未定义。我该如何解决?
- java - 如何使用 Log4j 将日志消息计数发送到 Graphite?
- c# - StackLayout isVisible 参数永远不会从 Xamarin.Forms 中的绑定更新
- ruby-on-rails - Rails 简单表单按钮文本
- javascript - 重新定义的 toString 的 getOwnPropertyDescriptor 应该是未定义的
- c++ - 使用 c++ 和 OpenCV 2.4.x 对两幅图像进行直方图匹配
- html - 转换翻译在 Chrome 中的键盘焦点上有奇怪的行为