在js中我们都知道使用async和await会执行异步就是会跳过等待的代码,先去执行其他代码,等等待时间到了才会执行。
如果当方法返回的是一个Promise对象,我们继续使用await的话就会等待当前执行完才会执行后面的代码,例如
<script>
let abc = 123
function a() {
return true;
}
async function myFun(ms) {
let r = await new Promise((res) => {
setTimeout(() => { res() }, ms);
});
abc = 456
return a();
}
async function myFun2(ms) {
let r = await new Promise((res) => {
setTimeout(() => { res() }, ms);
});
abc = 789
console.log(`${ms}秒后执行`, abc);
}
flag = false;
async function ce() {
await myFun2(3000)
myFun(500).then(result => {
//在这里处理执行a()后的业务
flag = result;
console.log("已过0.5s,我会工作,输出:" + flag);
console.log("已过0.5s,我会工作,输出:abc=" + abc);
});
console.log("虽然我在后,但是我比myFun()先输出:" + flag);
}
ce()
</script>