# await-to-js
# 概念
Async await wrapper for easy error handling 轻松处理错误的异步等待封装器
使用
await
处理异步操作时, Promise 有可能返回rejected
,一般会将await
放到try...catch
中,await-to-js
可以解决不使用try...catch
处理rejected
# 使用 和 对比
import to from 'await-to-js'
async fn() {
const [err, res] = await to(asyncFn())
if (err) {
// ...
}
// ...
}
// 多个异步操作情况
// async await
function async fn() {
try {
const p1 = await sFn1()
} catch {
// ...
}
try {
const p2 = await sFn2()
} catch {
// ...
}
try {
const p3 = await sFn3()
} catch {
// ...
}
}
// await to js
function async fn() {
const [e1, r1] = await to(sFn1())
if (e1) { // ...}
const [e2, r2] = await to(sFn2())
if (e2) { // ...}
const [e3, r3] = await to(sFn3())
if (e3) { // ...}
}
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
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
# 实现
- 参数
- promise 异步操作
- errorExt 自定义扩展错误信息
Object.assign({}, err, errorExt)
- 返回值:
then
返回[null, data]
,catch
返回[err, undefined]
/**
* @param { Promise } promise
* @param { Object= } errorExt - Additional Information you can pass to the err object 自定义扩展错误信息
* @return { Promise }
*/
export function to<T, U = Error> (
promise: Promise<T>,
errorExt?: object
): Promise<[U, undefined] | [null, T]> {
return promise
.then<[null, T]>((data: T) => [null, data])
.catch<[U, undefined]>((err: U) => {
if (errorExt) {
const parsedError = Object.assign({}, err, errorExt);
return [parsedError, undefined];
}
return [err, undefined];
});
}
export default to;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 收获
- 简单至上