本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。
学习目标
- 如何学习调试源码
- await-to-js 使用和原理
环境准备
git clone https://github.com/scopsy/await-to-js.git
await-to-js源码
/**
* @param { Promise } promise
* @param { Object= } errorExt - Additional Information you can pass to the err object
* @return { Promise }
*/
export 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];
});
}
export default to;
源码很容易理解,通过ES6的Promise语法将原有的异步调用封装一层。通过一层包装后,单独返回成功的执行和错误的执行。 更多案例可以参考官方demo
总结
合理的使用Promise语法,可以解决异步调用的作用域问题。