一、前提 同步异步

JS是一门单线程的语言,换言之就是无论如何都只有一个主线程来处理任务,所以为了加快处理速度,会将异步任务挂载起来(pending),优先执行同步任务。  

二、异步划分

  异步分为macro-task(宏观任务)与micro -task(围观任务)。存放顺序都为先后顺序,反之执行顺序也是如此,更深入则是涉及到事件机制,这里不表。 既然执行顺序为先后顺序,划分又为宏观与微观,这两种执行顺序又怎样呢?   微观任务完成才会执行宏观任务  

三、demo

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

 

四、解析

  注意: 1.async/await实际上是promise+generator的语法糖,也就是promise,也就是微观任务 2.promise函数是同步