你可以在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
處理程序返回它:
function log(reason) {
console.log("rejected with reason", reason, "continuing...");
return reason;
}
從評論:
如何使用捕捉野狗參考 - >日誌功能?
而不是僅僅通過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'是不是一個承諾,而是一個函數返回一個promise。也許你的意思是你想要通過拒絕原因調用'cur'到'log'函數導致的承諾?呃,實際上它已經是了。對不起,如果我不明白你的問題。 – 2016-11-20 02:28:02