美文网首页
js中的宏任务和微任务

js中的宏任务和微任务

作者: JsLin_ | 来源:发表于2021-01-26 22:54 被阅读0次

我们都知道,javaScript 是单线程的;

浏览器 通过拿到 j s 代码 传递给 js引擎 去执行, 引擎按顺序执行,这也就是宿主任务,

宿主任务:通过浏览器 去传递给js引擎去执行的任务;

当然 js 也可以通过 api 比如:setTimeout, setInterval 等 让宿主在特定时机 传递给引擎执行

在es5之后 es6 引入了 Promise 可以执行异步代码

这样,不需要浏览器的安排,JavaScript 引擎本身也可以发起任务了。

我们把宿主发起的任务称为宏观任务,把 JavaScript 引擎发起的任务称为微观任务。

所以宏观任务包括:setTimeout,setInterval 等

微观任务:Promise.then(()=>{//微任务代码段}) 中执行的代码

微任务必须在宏任务之前执行。因为 在宏观任务中 JavaScript 可能产生 Promise 这样的异步代码

JavaScript 必须保证这些异步代码必须在一个宏观任务中完成,因此,每个宏观任务中又包含了一个微观任务队列:

看下面一个例子:


    var r = new Promise(function(resolve, reject){
        console.log("a");
        resolve()
    });

    setTimeout(()=>console.log("d"), 0)

    r.then(() => console.log("c"));

    console.log("b")
image.gif

打印结果为: a b c d

如何分析异步执行的顺序:

首先我们分析有多少个宏任务;

在每个宏任务中,分析有多少个微任务;

根据调用次序,确定宏任务中的微任务执行次序;

根据宏任务的触发规则和调用次序,

确定宏任务的执行次序;确定整个顺序。

相关文章

  • 浏览器的事件机制-Eventloop

    循环机制前,我们先要会区分:宏任务与微任务 宏任务Task与微任务Microtask JS中的宏任务和微任务的区别...

  • 宏任务和微任务

    [js 宏任务和微任务] .宏任务(macrotask )和微任务(microtask ) macrotask 和...

  • js中的宏任务和微任务

    我们都知道,javaScript 是单线程的; 浏览器 通过拿到 j s 代码 传递给 js引擎 去执...

  • js中的异步任务:宏任务、微任务

    js的异步任务分2类:宏任务(macrotask )和微任务(microtask ) 什么是宏任务、微任务 网上用...

  • js 宏任务和微任务

    1:主线程 2:.宏任务(macrotask )和微任务(microtask ) 最后看个例子: 分析 • 首先浏...

  • js 宏任务和微任务

    js 执行时首先会从宏任务中获取第一个并执行,执行过程中会将遇到的微任务放入微任务队列,当宏任务执行完成时再去依次...

  • js 宏任务和微任务

    .宏任务(macrotask )和微任务(microtask )macrotask 和 microtask 表示异...

  • js微任务和宏任务

    JavaScript 语言的一大特点就是单线程,也就是说同一个时间只能处理一个任务。为了协调事件、用户交互、脚本、...

  • js中的宏任务、微任务

    宏任务-macroTask 包括整体代码script,setTimeout,setInterval 微任务-mic...

  • 微任务和宏任务

    JS是单线程的,可以把这个线程叫做主线程,主线程中包含宏任务队列和微任务队列,宏任务所在的队列就叫宏任务队列,微任...

网友评论

      本文标题:js中的宏任务和微任务

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