js-try-catch代码提取

为了代码健壮性,亦或为了捕获异步的错误, 会频繁写 try / catch

1
2
3
4
5
6
7
8
9
10
11
12
13
try {
const res = await asyncFunc();
// admin 通常的接口结构, success 判断是否成功
if (res.success) {
// 成功处理
} else {
// 错误处理, 如重置表单, 清空表格, 友好的$message错误提示 等
}
} catch (e) {
// 错误处理, 如重置表单, 清空表格, 友好的$message错误提示 等
} finally {
// 关闭 loading 等
}

提取出来

1
2
3
4
5
6
7
8
9
10
11
12
13
const wrapRequest = async (req) => {
try {
const res = await req();
// admin 通常的接口结构
if (res.success) {
return [res.result, null];
} else {
return [null, err];
}
} catch (err) {
return [null, err];
}
};

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
async function func() {
const [res, err] = await wrapRequest(req);
if (err) {
// 错误处理 here
}
// 成功处理 & finally 处理 here
}

// 只需要 err
async function func() {
const [, err] = await wrapRequest(req);
if (err) {
// 错误处理 here
}
// 成功处理 & finally 处理 here
}

但是每次都要引用 wrapRequest ….@$#%^&(#$%@+@!)