使用 `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];
  }
}

希望这能帮助你写出更整洁的异步代码!

posted @ 2025-06-24 18:07  蔡春保  阅读(12)  评论(0)    收藏  举报