3

js事件轮询:

  1. js 是一门单线程语言,从上往下执行的,首先,主线程读取js代码,此时是同步的环境
  2. 当主线程检测到异步操作,就会交给其他异步线程处理,然后继续执行主线程的的任务
  3. 异步任务执行完毕之后,判断异步任务的类型,异步任务可分成宏任务和微任务,像setTimeout、setInterval属于宏任务,promise.then属于微任务,不同的任务进入不同的队列,等待主线程空闲时候调用。
  4. 当主线程的的同步任务执行完毕之后,开始执行微任务队列里面的所有微任务,执行完微任务,就执行宏任务队列里面所有的宏任务
  5. 执行完成之后,主线程开始询问任务队列里面是否还有等待的任务,如果有则进入主线程继续执行

以上步骤重复执行就是事件轮询

  1. 微观任务是先于宏观任务的
  2. await: 先将await的结果打印出来,await后面的任务类似于promise放入微任务
  3. 执行到new Promise(),Promise构造函数是直接调用的同步代码,resolve如果调用的方法也会立即执行,如果调用的是同步方法就会同步执行,如果是异步方法就会按照异步方法执行
  4. 代码接着运行到promise.then( ),发现这是一个微任务,推入当前宏任务的微任务队列中。
     setTimeout(function () {
         console.log('setTimeout');
     })
     new Promise(function (resolve) {
         console.log('promise');
     }).then(function () {
         console.log('then');
     })
     console.log('console');
     function aaa() {
         console.log(123)
     }
     setTimeout(function () {
         console.log('setTimeout');
     });
     (() => new Promise(function (resolve) {
         console.log('promise');
         resolve(aaa())
     }).then(function () {
         console.log('then');
     }))();
     console.log('console');
   async function async1() {
        console.log("async1 start")
        await async2()
        console.log("async1 end")
    }

    async function async2() {
        console.log("async2")
    }
    console.log("script script")
    setTimeout(function () {
        console.log("setTimeout")
    }, 0)
    new Promise(function (resolve) {
        console.log("promise1")
        resolve()
    }).then(function () {
        console.log('promise2')
    })
    async1()
    console.log("script end")
    console.log('example-start')
    setTimeout(() => {
        console.log('setTimeout-0') 
    }, 0)
    new Promise((resolve, reject) => {
        console.log('promise-1')
        resolve('promise-2')
        Promise.resolve().then(() => console.log('promise-3')) 
    }).then((response) => { 
        console.log(response)
        setTimeout(() => {
            console.log('setTimeout-10') 
        }, 10)
    })
    console.log('example-end')

guona
54 声望11 粉丝