优化 Promise 错误处理流程的工具函数

38 阅读1分钟

在现代 JavaScript 开发中,处理异步操作的错误是一项重要而棘手的任务。为了解决这一问题,最初提出了一个新的运算符 ?= (Safe Assignment) ,旨在简化错误处理流程。该提案的详细信息可以在这里找到:原提案

随着提案的发展,它最终更名为 Try Operator,并可在此处查看:新的提案

在提案演变过程中,最初的第三方实现库是 tuple-it,后续改为Try 库

然而,由于该提案尚未被广泛应用,且存在兼容性处理的问题,使用第三方库的过程也显得繁琐且耗时。因此,作为一个过渡方案,使用工具函数来处理 Promise 的错误变得尤为重要。

以下是一个简单而有效的工具函数示例,用于优化 Promise 的错误处理流程:

async function tuple<T>(maybePromise: Promise<T>): Promise<[Error?, T?]> {
  try {
    return [null, await maybePromise];
  } catch (error) {
    if (error instanceof Error) {
      return [error, {} as any];
    }

    return [new Error('tuple error')];
  }
}