如何捕获同步承诺链中的错误

mac*_*nco 1 javascript promise ecmascript-6 es6-promise

我正在构建一个同步系列的Promises,如下所示:

let order = [fn1, fn2, fn3];
let result = Promise.resolve();
order.reduce((chain, task) => {
    return chain.then(task);
}, result);
Run Code Online (Sandbox Code Playgroud)

(通过一节中的"在系列执行的承诺" 这篇文章).这会像我期望的那样按顺序运行所有内容,但是在捕获错误/放置catch块的位置方面存在问题.

Ber*_*rgi 6

只需将它放在最后,您通常也会继续使用链条:

[fn1, fn2, fn3].reduce((chain, task) => {
    return chain.then(task);
}, Promise.resolve()).catch(err => {
    console.error(err);
});
Run Code Online (Sandbox Code Playgroud)

请记住,reduce扩展到

Promise.resolve().then(fn1).then(fn2).then(fn3).catch(err => {
    console.error(err);
});
Run Code Online (Sandbox Code Playgroud)