3,promise async/await settimeo

2021-09-09  本文已影响0人  kafya

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

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函数体。

上一篇下一篇

猜你喜欢

热点阅读