await-to-js 是一个用于简化异步错误处理的小型JavaScript库。
1.函数定义
export function to<T, U = Error>(promise: Promise<T>, errorExt?: object): Promise<[U, undefined] | [null, T]>
这个函数名为 to
,它是一个泛型函数,接受一个类型为 Promise<T>
的参数 promise
,其中 T
是 Promise 成功时返回的数据类型。它同时也接受一个可选的类型为 object
的参数 errorExt
,用于在错误发生时提供额外的错误信息。函数的返回值是一个 Promise,其类型为 Promise<[U, undefined] | [null, T]>
,即可以是 Promise 成功时的元组 [null, T]
,也可以是 Promise 失败时的元组 [U, undefined]
。
2.实现逻辑:
return promise
.then<[null, T]>(data => [null, data])
.catch<[U, undefined]>(err => {
if (errorExt) {
const parsedError = Object.assign({}, err, errorExt);
return [parsedError, undefined];
}
return [err, undefined];
});
在函数内部,使用 then
和 catch
来处理 Promise 的两种状态。then
用于捕捉成功时返回的数据,并将其映射到 [null, T]
的格式。catch
用于捕捉错误,并根据 errorExt
是否存在来决定如何返回错误信息。如果 errorExt
存在,它会创建一个包含原始错误信息和 errorExt
的新错误对象。