美文网首页
8,setTimeout、Promise、Async/Await

8,setTimeout、Promise、Async/Await

作者: r8HZGEmq | 来源:发表于2019-11-18 15:02 被阅读0次

KeyWords:宏(微)任务队列、阻塞非阻塞(强调线程状态)、同步异步强调一种“机制”
任务是连续的(同步)、不连续(异步)
1, setTimeout

// setTimeout(回调函数在宏任务队列中。最后才执行)
console.log('script start')
setTimeout(function(){
    console.log('settimeout')
})
console.log('script end')
// 输出顺序:script start->script end->settimeout

2,Promise

// Promise(then之前的代码顺序执行,then里的回调函数放在宏任务里的微任务中。
// 等宏任务里面的同步代码执行完再执行)
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

3,async / await

/* async函数表示函数里面可能会有异步方法,await后面跟一个表达式,
async方法执行时,遇到await会立即执行表达式,
然后把表达式后面的代码放到微任务队列里,让出执行栈让同步代码先执行。*/
async function async1(){
   console.log('async1 start');
    await async2();
    console.log('async1 end')
}
async function async2(){
    console.log('async2')
}
console.log('script start');
async1();
console.log('script end')

// 输出顺序:script start->async1 start->async2->script end->async1 end

其实async返回的是一个Promise,所以可以在后面.then(),如下面

async function func1() {
    return 1
}
func1().then(res => {
  console.log(res)
})

相关文章

网友评论

      本文标题:8,setTimeout、Promise、Async/Await

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