美文网首页
宏观任务与微观任务

宏观任务与微观任务

作者: 笃笃木鱼 | 来源:发表于2019-04-01 22:27 被阅读0次

宏观微观

概念

宿主
宏观任务:宿主发起的任务为宏观任务,如setTimeout、setInterval、setImmediate,I/O
微观任务:JavaScript引擎发起的任务为微观任务,如Promise

JavaScript引擎等待宿主环境分配宏观任务,宏观任务的队列可以理解为一个事件循环:

while(TRUE) {
  r = wait();
  execute(r);
}

每个宏观任务中又包含一个微观任务队列

宏观任务队列.jpg

有:

  1. setTimeout等宿主API,会添加宏观任务
  2. Promise永远在队列尾部添加微观任务

分析异步执行的方法

  1. 分析有多少个宏观任务
  2. 在每个宏观任务中,分析有多少个微观任务
  3. 根据调用次序,确定宏观任务中微观任务执行次序
  4. 根据宏观任务调用次序和触发原则,确定宏观任务执行次序
  5. 确定整个次序

async/await

是ES6新特性,提供了用for if来编写异步代码的方式
async函数必定返回Promise,所有返回Promise的函数都可以认为是异步函数

用法

在function关键字之前加上async关键字,就定义了一个async函数,可以在其中使用await来等待一个Promise。
async可以嵌套

function sleep(duration) {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, duration)
  })
}
async function foo(name) {
  await sleep(2000)
  console.log(name)
}
async function foo2() {
  await foo("a")
  await foo("b")
}

相关文章

网友评论

      本文标题:宏观任务与微观任务

      本文链接:https://www.haomeiwen.com/subject/tqcibqtx.html