zoukankan      html  css  js  c++  java
  • 事件循环event loop

    const promise = new Promise((resolve, reject) => {
        console.log(1);
        resolve();
        console.log(2);
    })
    promise.then(() => {
        console.log(3);
    })
    console.log(4);
    以上输出结果为1243
    首先Promise新建后立即执行,所以会先输出1,2,而Promise.then()内部的代码在当次事件循环的结尾立即执行,所以会先输出4,最后输出3.

    事件循环里面有宏任务和微任务:
    宏任务有setTimeout、setInterval、 setImmediate、script(整体代码)、 I/O 操作等
    微任务有process.nextTick、new Promise().then(回调)

    Node与浏览器的 Event Loop 差异:
    node11及之后与浏览器保持一致,先执行一个宏任务,宏任务执行完把当前的微任务清空
    node10及之前允许多个宏任务先执行,然后再按顺序清空宏任务对应的微任务队列
    setTimeout(()=>{
        console.log('timer1')
        Promise.resolve().then(function() {
            console.log('promise1')
        })
    }, 0)
    setTimeout(()=>{
        console.log('timer2')
        Promise.resolve().then(function() {
            console.log('promise2')
        })
    }, 0)
    

      在浏览器中执行输出:timer1 promise1 timer2 promise2

      node10执行输出:timer1 timer2 promise1 promise2

      node11执行输出:timer1 promise1 timer2 promise2与浏览器保持一致

  • 相关阅读:
    PartialView
    常用取默认值
    迁移环境或升级正常功能出bug常见原因
    模拟登陆语法
    fsg报表相关
    常用数组定义方式
    to_char函数 官方文档详解(数字格式转换和日期转换)
    个人工作window10常用快捷键
    ebs常见概念解释
    常用ASCII码和字符的转换
  • 原文地址:https://www.cnblogs.com/dylAlex/p/11093168.html
Copyright © 2011-2022 走看看