JavaScript:使用await使asnyc代码看起来更同步
我试图理解asnyc等待功能。 因此,我想使用asnyc函数,解析它,然后依次执行以下日志 我如何做到这一点?还是我理解了一些根本错误的东西JavaScript:使用await使asnyc代码看起来更同步,javascript,asynchronous,Javascript,Asynchronous,我试图理解asnyc等待功能。 因此,我想使用asnyc函数,解析它,然后依次执行以下日志 我如何做到这一点?还是我理解了一些根本错误的东西 const test = async function() { console.log('hi 1'); await setTimeout(() => { console.log('timout1') }, 1000); console.log('hi 2'); console.log('hi
const test = async function() {
console.log('hi 1');
await setTimeout(() => {
console.log('timout1')
}, 1000);
console.log('hi 2');
console.log('hi 3');
}
test()
结果
hi 1
hi 2
hi 3
timout1
hi 1
timout1
hi 2
hi 3
预期结果
hi 1
hi 2
hi 3
timout1
hi 1
timout1
hi 2
hi 3
您可以仅对承诺使用
wait
,并且setTimeout
函数不会返回承诺。但是,您可以等待使用setTimeout
解决的承诺,这将为您提供所需的结果
因此,函数执行将停止,直到被wait
ed的承诺得到解决或被拒绝,然后继续
const test=async function(){
console.log('hi1');
//返回在触发setTimeout回调后解析的新承诺
等待(新承诺)(解决、拒绝)=>{
设置超时(()=>{
console.log('timout1')
解决()
}, 1000)
}))
console.log('hi2');
console.log('hi3');
}
test()
我希望这段代码能帮助您理解async wait
函数resolveAfter2Seconds(){
返回新承诺(解决=>{
设置超时(()=>{
解决(“已解决”);
}, 2000);
});
}
异步函数asyncCall(){
console.log('hi1');
const result=等待resolveAfter2Seconds();
控制台日志(结果);
console.log('hi2');
console.log('hi3');
}
异步调用()代码>啊!你是对的!仅仅因为setTimeout()是asnyc并不意味着它是一个承诺!