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

宏观任务与微观任务

作者: 笃笃木鱼 | 来源:发表于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