Promise与Async/Await
Event Loop
这个网站很好用 JavaScript Visualizer 9000
示例图
Promise
概念
new Promise((resolve, reject) => {})
里面的函数是同步(立刻)执行,then/catch/finally
里面的函数是异步(进入微任务队列)执行微任务队列:
Promise.then/catch/finally
、MutationObserver
、process.nextTick
、Object.observe
宏任务队列:
setTimeout
、setInterval
、setImmediate
、requestAnimationFrame
、I/O
、UI rendering
微任务队列优先级高于宏任务队列。在每一次事件循环中,只要调用栈为空,就会先执行微任务队列中的任务,直到微任务队列为空,再执行宏任务队列中的任务
示例
+
+
Async/Await
概念
async
函数是Generator
和Promise
的语法糖async
函数返回一个Promise
对象,await
表达式会暂停async
函数的执行,等待Promise
的解决,然后恢复async
函数的执行并返回解决值可以转换成
Promise
的写法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33async function async1() {
console.log('async1 start')
await async2() // await为等待promise的状态,然后把值拿到
console.log('async1 end')
}
async function async2() {
return Promise.resolve().then(_ => {
console.log('async2 promise')
})
}
async1()
// 等价于
function async1() {
console.log('async1 start');
async2().then(() => {
console.log('async1 end');
});
}
function async2() {
return new Promise((resolve, reject) => {
Promise.resolve().then(_ => {
console.log('async2 promise');
resolve();
});
});
}
async1();
示例
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小四先生的云!
评论