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