【JS】 异步编程
OriginHeart 2021-12-28 js
# async & await
实质上就是 Promise 的语法糖
// fun() 返回的是一个 Promise, return 就是 then(res=>{})
async function fun() {
return 0;
}
/*
resolve 处理
用 await 方式代替 then(res=>{}), 其结果就是 res
await 必须在 async 中使用
*/
(async () =>{
let res = await fun() // res = 0;
})()
(async () =>{
fun().then(res => {console.log(res)}) // res = 0;
})()
/*
reject 处理
使用 try... catch... 代码块
*/
(async () => {
try {
let res = await fun() // res = 0;
} catch(e) {
console.log(res);
}
})()
/*
多个 Promise 同时执行, 且同时拿到结果
假设 p1(), p2() 返回的是俩 Promise
*/
async function test() {
// 方式一: 数组返回 = Promise.all([fun...]).then(([res...]) => {})
let res = await Promise.all([p1(),p2()]);
// 方式二: 逐个返回
let h1 = p1();
let h2 = p2();
let h1Value = await h1;
let h2Value = await h2;
}
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47