在现代 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')];
}
}