我在NodeJS项目中使用Promises,并希望更好地理解Promise.chains .
我有一个暴露的功能:
主库函数,我希望我的用户调用 . 它将返回一个承诺,然后用户需要处理解决方案并拒绝承诺 .
主库函数将调用许多其他库函数,我想链接 . 所以这些函数中的每一个都会返回一个这样的承诺:
mainLibraryFunction = function (arguments...) {
return this.firstLibraryFn().then(secondLibraryFn).then(thirdLibraryFn)...
}
这些中的每一个都将返回一个承诺,可以是拒绝或解决 . 我想要的是,如果任何库函数拒绝,然后将拒绝传递给下一个函数,我想将拒绝退出MainLibraryFunction . 因为否则我需要为每个库函数实现错误情况的处理 . 因为他们每个人都会得到承诺作为参数,我需要检查每个函数,我得到解决或拒绝作为参数的承诺 . 然后我需要通过所有函数传递被拒绝的参数,直到最后一个函数可以将它从MainLibraryFunction返回 . 这不是明智之举 .
那么处理这个问题的最佳做法是什么?我应该在链的末尾添加捕获量吗?我听说如果我在最后添加一个捕获,它应该打破链,即使它们中的任何一个会拒绝 . 然后从catch中,我可以从MainLibraryFunction返回Promise.reject() .
1 回答
.then
方法接受两个参数:onFulfilled
和onRejected
. 如果您不提供onRejected
回调,则不会调用此特定.then
,并且链将转到实现onRejected
或.catch
的下一个处理程序 .因此,不,你不必让每个函数解析他们的参数 . 如果承诺被拒绝,则不会调用
secondLibraryFn
等,因为它们仅被定义为onFulfilled
处理程序 . 您可以放心地假设它们将被跳过,只需在链的末尾添加.catch
,以便捕获任何和所有错误 .