下面两个注意很重要
第1题
setTimeout(()=>{
console.log(1)
},0)
Promise.resolve().then(()=>{
console.log(2)
})
Promise.resolve().then(()=>{
console.log(4)
})
console.log(3)
1结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7bcb58d350b7c0391f3454ceabcd1a40.png)
第2题
setTimeout(() => {
console.log(1)
}, 0)
new Promise((resolve) => {
console.log(2)
resolve()
}).then(() => {
console.log(3)
}).then(() => {
console.log(4)
})
console.log(5)
2结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/63e0a2dc7061cddafd01a1836c5cc896.png)
第3题
const first = () => (new Promise((resolve, reject) => {
console.log(3)
let p = new Promise((resolve, reject) => {
console.log(7)
setTimeout(() => {
console.log(5)
resolve(6)
}, 0)
resolve(1)
})
resolve(2)
p.then((arg) => {
console.log(arg)
})
}))
first().then((arg) => {
console.log(arg)
})
console.log(4)
3结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a2ed1e61091fbd0f53205b84d372b25d.png)
第4题
setTimeout(() => {
console.log("0")
}, 0)
new Promise((resolve,reject)=>{
console.log("1")
resolve()
}).then(()=>{
console.log("2")
new Promise((resolve,reject)=>{
console.log("3")
resolve()
}).then(()=>{
console.log("4")
}).then(()=>{
console.log("5")
})
}).then(()=>{
console.log("6")
})
new Promise((resolve,reject)=>{
console.log("7")
resolve()
}).then(()=>{
console.log("8")
})
4结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d6b9e190c437d6c90dfe94490ba36d31.png)
第5题
Promise.resolve().then(() => {
console.log(0);
return Promise.resolve(4);
}).then((res) => {
console.log(res);
})
Promise.resolve().then(() => {
console.log(1);
}).then(() => {
console.log(2);
}).then(() => {
console.log(3);
}).then(() => {
console.log(5);
}).then(() => {
console.log(6);
})
5结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/33d377b1f9609feabcf5c6ba3eafdf29.png)
注意:then方法中的回调函数如果返回的是Promise对象,那么此回调函数的下一个链式调用的回调函数将会让微任务队列中的其他Promise对象任务执行2次之后才会执行此回调函数的下一个链式调用的回调函数
第6题.async&await
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0)
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
注意:将await表达式下面的内容看成是await右边Promise对象then回调函数中的内容