async/await 错误处理

446 阅读1分钟

针对 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
})();