Javascript 链接承诺,但在一个承诺失败时继续下一个承诺(并记录拒绝)
我有许多函数存储在一个数组中。 基本上我有两个问题Javascript 链接承诺,但在一个承诺失败时继续下一个承诺(并记录拒绝),javascript,promise,Javascript,Promise,我有许多函数存储在一个数组中。 基本上我有两个问题 如何将此函数数组转换为链接承诺。(长数组) 类似于: funcs.reduce((上一个,当前)=>prev.then(当前),起始值) 或 var promise=funcs[0](输入); 对于(var i=1;ilog函数中使用cur引用 不只是将log传递给catch,而是传递一个调用log的函数,该函数包含原因和函数: funcs.reduce( (prev, cur) => prev.then(cur).catch(rea
funcs.reduce((上一个,当前)=>prev.then(当前),起始值)代码>
或
var promise=funcs[0](输入);
对于(var i=1;i
您可以在
reduce
回调中处理拒绝
funcs.reduce((prev, cur) => prev.then(cur).catch(log), starting_promise)
或者,您可以预处理函数数组:
funcs.map(f => v => f(v).catch(log))
.reduce((prev, cur) => prev.then(cur), starting_promise)
在这两种情况下,关键是catch
将承诺放回到成功轨道上,就像它一样(除非您在catch处理程序中抛出)
请注意,catch
处理程序返回的任何内容都将成为承诺链中下一个函数的输入值。如果希望拒绝原因成为输入,则从catch
处理程序返回:
function log(reason) {
console.log("rejected with reason", reason, "continuing...");
return reason;
}
在评论中:
如何在catch->log函数中使用cur引用
不只是将log
传递给catch
,而是传递一个调用log
的函数,该函数包含原因和函数:
funcs.reduce(
(prev, cur) => prev.then(cur).catch(reason => log(reason, cur)),
starting_promise)
function log(reason, func) {
console.log("rejected with reason", reason, "in function", func, "continuing...");
return reason;
}
@Phoelpis记住,
cur
不是承诺,而是返回承诺的函数。也许您的意思是希望将调用cur
产生的承诺的拒绝原因传递给log
函数?嗯,实际上已经是了。对不起,如果我不明白你的问题。