JS async/await 不能阻塞返回 非Promise对象 测试
JS async/await 不能阻塞返回 非Promise对象
- 测试代码1
async function fn1(){
console.log(1);
await pr1();
await pr2();
console.log(2);
};
function fn2(){
console.log(3);
};
function pr1(){
setTimeout(() => {
console.log(4);
resolve();
}, 2000);
};
function pr2(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(5);
resolve();
}, 1000);
});
};
(async ()=>{
await fn1();
fn2();
})();
输出:15234
- 测试代码2
从表现上来看,似乎区别在pr1 的返回是一个 promise对象
async function fn1(){
console.log(1);
await pr1();
await pr2();
console.log(2);
};
function fn2(){
console.log(3);
};
function pr1(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(4);
resolve();
}, 2000);
});
};
function pr2(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(5);
resolve();
}, 1000);
});
};
(async ()=>{
await fn1();
fn2();
})();
输出:15234
(1)await后面如果不是一个promise对象,那么它就按正常的js顺序执行,先执行同步代码,当主线程空闲了,再去执行异步队列的任务!
(2)await后面如果是promise对象,那么await后面的内容还是相当于在then执行,跟promise的区别在于,如果等待的是一个promise对象,那么要等待这个对象解析完成,如果没有resolve或者reject,那么后面的内容就不会执行;如果有resolve或者reject,那么后面的内容正常执行。
原文链接:https://blog.csdn.net/MRlaochen/article/details/118799759