之前一直对这个云里雾里,这次翻看了一些大佬的讨论,终于有些弄明白了
以下题目,涉及异步函数setTimeout、Promise、Async/Await
说到异步就要提到事件队列:宏队列和微队列
setTimeout的回调函数触发后,会被放入宏队伍里,等栈完全清空后执行;
把Promise看做是同步的立即执行函数,代码运行到Promise会立即执行,但是.then之后的内容会被放到微队列,等同步代码执行之后再执行。
Async/Await,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');
// script start
// async1 start
// async2
// promise1
// script end
// async1 end
// promise2
// setTimeout