- examples
| - examples-1.js
- src
|- await-to-js.ts
- test
|- await-to-js.ts
- tools // 代码打包发布脚本
|- gh-pages-publish.ts
|- semantic-release-prepare.ts
- README.md
- package.json
- rollup.config.js // 代码打包文件
...
- 根据
package.json ,进行包的安装,yarn - 通过这个src目录只有一个文件,
await-to-js.ts ,接下来看看该文件内部怎么写的吧
- 解决的一个问题,避免try-catch去抓取错误,使得代码看起来不够优雅,从源码来看,提供一个to方法,基于Promise的一次封装;公有两个参数,一个是promise对象为必填参数,另外一个为errorExt错误配置参数,可选值
- then方法后,resole()后成功值,放回的一个成功数组。
- catch方法,reject()错误值,返回的一个错误数组。
- 判断errorExt存在,将errorExt和err进行合并返回。
- 反之,直接返回[err, undefined]
function to<T, U = Error> (
promise: Promise<T>,
errorExt?: object
): Promise<[U, undefined] | [null, T]> {
return promise
.then<[null, T]>((data: T) => [null, data])
.catch<[U, undefined]>((err: U) => {
if (errorExt) {
const parsedError = Object.assign({}, err, errorExt);
return [parsedError, undefined];
}
return [err, undefined];
});
}
参考资料
|