繁体   English   中英

了解承诺链

[英]Understanding promise chains

我在NodeJS项目中使用Promises,并希望更好地了解Promise.chains。

我有一个公开的功能:

我希望用户调用的主要库函数。 它将返回一个承诺,然后用户需要处理解决和拒绝的承诺。

Main库函数将调用许多其他我想链接的库函数。 因此,每个函数都会返回一个promise,如下所示:

mainLibraryFunction = function (arguments...) {
  return this.firstLibraryFn().then(secondLibraryFn).then(thirdLibraryFn)...
}

这些都将返回一个承诺,可以是拒绝或解决。 我想要的是,如果任何库函数拒绝,那么我想将拒绝从MainLibraryFunction中返回,而不是将拒绝传递给下一个函数。 因为否则,我需要为每个库函数实现错误情况的处理。 因为它们每个都将promise作为参数,所以我需要检入每个函数,这些函数是否已将promise解析或拒绝为参数。 然后,我需要将该拒绝的参数传递给所有函数,直到最后一个函数可以将其从MainLibraryFunction中返回为止。 这不是明智的。

那么处理此问题的最佳实践是什么? 我应该在链的末尾添加渔获量吗? 我听说如果在最后添加一个陷阱,即使其中任何一个会拒绝,它也应该打破链条。 然后从捕获中,我可以从MainLibraryFunction中返回Promise.reject()。

.then方法接受两个参数: onFulfilledonRejected 如果你不提供一个onRejected回调,这个特殊的.then将不会被调用和链条都将落空,以实现下一个处理onRejected .catch

 Promise.reject() .then(() => console.log('onFulfilled 1')) .catch(() => console.log('catch 1')); // will get called Promise.reject() .then( () => console.log('onFulfilled 2'), () => console.log('onRejected 2') // will get called ) .catch(() => console.log('catch 2')); // will not get called 

因此,不需要,您不必使每个函数都解析其参数。 如果承诺被拒绝,将不会调用secondLibraryFn等,因为它们仅被定义为onFulfilled处理程序。 您可以放心地假设它们将被跳过,只需在要捕获任何和所有错误的链的末尾添加.catch即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM