使用 `toPromise` 函数简化异步代码中的错误处理,减少try...catch的出现
使用 toPromise 函数简化异步代码中的错误处理
在现代 JavaScript/TypeScript 开发中,异步操作(Promise)和错误处理(try...catch)无处不在。大量重复的 try...catch 语句不仅使代码冗长,还影响可读性和维护性。为此,可以封装一个通用的 toPromise 函数,将异步操作的错误和结果统一用数组返回,简化错误处理过程。
什么是 toPromise
toPromise 是一个接收 Promise 的包装函数,它将异步调用封装成返回 [error, result] 二元组的形式。调用时,无需显式地使用 try...catch,就能同时拿到错误和结果。
toPromise 实现示例
async function toPromise(promise) {
try {
const result = await promise;
return [null, result];
} catch (error) {
return [error, null];
}
}
使用示例
假设有一个异步请求:
async function fetchData() {
const response = await fetch('/api/data');
if(!response.ok) throw new Error('Network response was not ok');
return response.json();
}
传统写法:
try {
const data = await fetchData();
console.log('数据:', data);
} catch (err) {
console.error('请求失败:', err);
}
使用 toPromise:
const [err, data] = await toPromise(fetchData());
if (err) {
console.error('请求失败:', err);
} else {
console.log('数据:', data);
}
优点
- 代码简洁:避免重复写大量
try...catch语句 - 统一格式:错误和结果以固定数组格式返回,便于处理
- 可组合:适用于各种异步函数调用
注意事项
toPromise不会捕获同步错误,请确保传入的是返回 Promise 的异步函数调用。- 该模式偏向于“返回错误”而不是抛出错误,适合希望显式处理错误场景。
总结
toPromise 函数是优化异步代码错误处理的一个简洁实用工具。它简单、高效,有效减少了大量 try...catch 的堆砌,让代码更易读、易维护。
你可以直接定义如下 toPromise 函数,快速在项目中使用:
async function toPromise(promise) {
try {
const result = await promise;
return [null, result];
} catch (error) {
return [error, null];
}
}
希望这能帮助你写出更整洁的异步代码!

浙公网安备 33010602011771号