美文网首页
3,promise async/await settimeo

3,promise async/await settimeo

作者: kafya | 来源:发表于2021-09-09 18:18 被阅读0次

    这题主要考察的是这三者在事件循环中的区别,事件循环中分为宏任务队列和微任务队列。

    • 其中setTimeout的回调函数放到宏任务队列中,等到执行栈清空后执行;
    • promise.then里的回调函数会放到相应宏任务的微任务里,等宏任务里的同步代码执行完再执行
    • async函数表示函数里可能会有异步方法,awit后面跟一个表达式,async方法执行时,遇到await会立即执行表达式,然后表达式后面的代码放到微任务队列里,让出执行栈让同步代码先执行。

    Promise

    Promise本身是同步的立即执行函数,当在executor中执行resolvereject时候,此时的异步操作,会先执行then/catch等,当主栈完成后,才会去调用resolve/reject中存放的方法执行

    console.log("script start");
    let promise1=  new Promise(function(resolve){
      console.log("promise1");
      resolve()
      console.log("promise1 end")
    }).then(function(){
      console.log("promise2");
    });
    setTimeout(function(){
      console.log("settimeout")
    })
    console.log("script end");
    
    // script start  ->  promise1> promise1 end ->script end   ->   promise2     ->  settimeout
    

    async

    async function async1() {
      console.log("async1 start");
      await async2();
      console.log("async1 end");
    }
    async function async2() {
      console.log("async2 start");
      setTimeout(function () {
        console.log("async2 setTimeout");
      }, 0);
      console.log("async2 end");
    }
    setTimeout(function () {
      console.log("setTimeout");
    }, 0);
    console.log("script start");
    async1();
    console.log("script end");
     // script start -->  async1 start -> async2 start -> async2 end  -> script end ->async1 end -> setTimeout ->async2 setTimeout
    

    async 函数返回一个Promise对象,当函数执行的时候,一旦遇到await就会先返回,等到触发的异步操作完成,在执行函数体内后面的语句,可以理解为,让出线程,跳出async函数体。

    相关文章

      网友评论

          本文标题:3,promise async/await settimeo

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