如何使用setTimeout等待延迟操作的结果?


function z(){
setTimeout(()=>{
console.log("A")
},3000)
}
z()
console.log("B")

我期望的输出

A(3 sec delay)
B

输出

B
A(3 sec delay)

如何获得这个异步代码的同步行为?

对于第一个解决方案,OP需要…

  • 写一个wait函数,它接受一个数字值(表示毫秒),并返回一个Promise实例,在提供的延迟后解析。
  • 利用wait函数,通过promise'then方法记录等待时间后的待延迟值。

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

对于第二个解决方案,上面提供的代码可以重写为async function,它记录OP的两个值,并在记录之间,await记录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; }

最新更新