Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:使用await使asnyc代码看起来更同步_Javascript_Asynchronous - Fatal编程技术网

JavaScript:使用await使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

我试图理解asnyc等待功能。 因此,我想使用asnyc函数,解析它,然后依次执行以下日志

我如何做到这一点?还是我理解了一些根本错误的东西

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并不意味着它是一个承诺!