针对 async/await 的错误处理,你可能会用 try/catch 去捕获错误部分,当出现多个 async/await 时,代码里会多了一堆的 try/catch,代码不够优雅,那么如何优雅处理 async/await 的错误呢?可以添加一个 awaitWrap 工具函数处理。
核心逻辑:把resolve和reject的里值处理成数组返回。如果结果是resovle,数组第一项为null,如果结果是reject,数组第二项为null。通过判断第一项为null,或者第二项为null,即可区分出是resolve/reject。
;(async () => {
const fetchData = function() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('promise result')
}, 2000)
});
};
const awaitWrap = (promise) => {
return promise
.then(data => [null, data])
.catch(err => [err, null]);
};
// const data = await fetchData();
const [err, data] = await awaitWrap(fetchData());
console.log('err =', err); // err = null
console.log('data =', data); // data = promise result
})();