提问人:SAMRAT PATEL 提问时间:1/16/2023 最后编辑:Peter SeligerSAMRAT PATEL 更新时间:1/31/2023 访问量:109
如何使用 setTimeout 等待延迟操作的结果?
How does one await the result of a deferred operation with setTimeout?
问:
function z(){
setTimeout(()=>{
console.log("A")
},3000)
}
z()
console.log("B")
我预期的输出
A(3 sec delay)
B
我得到的输出
B
A(3 sec delay)
如何使用此异步代码获取同步行为?
答:
0赞
Peter Seliger
1/16/2023
#1
对于第一个解决方案,OP 需要......
- 编写一个函数,该函数接受一个数字值(表示毫秒)并返回一个
Promise
实例,该实例在提供的延迟后解析。wait
- 通过 promise
的 then
方法在等待的时间之后记录 to be delay 值来利用该函数。wait
function wait(msec) {
return new Promise(resolve =>
setTimeout(resolve, msec)
);
}
console.log('A');
wait(3000)
.then(() => console.log('B'));
.as-console-wrapper { min-height: 100%!important; top: 0; }
对于第二种解决方案,可以将上面提供的代码重写为异步
函数,该函数会记录 OP 的两个值,并在日志记录之间等待 返回的 promise。
wait
function wait(msec) {
return new Promise(resolve =>
setTimeout(resolve, msec)
);
}
(async () => {
console.log('A');
await wait(3000);
console.log('B');
})();
.as-console-wrapper { min-height: 100%!important; top: 0; }
下一个:h1 的文字消失在哪里?
评论
setTimeout
z
console.log('B')
z
await z()