Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 理解承诺链_Javascript_Node.js_Promise_Es6 Promise - Fatal编程技术网

Javascript 理解承诺链

Javascript 理解承诺链,javascript,node.js,promise,es6-promise,Javascript,Node.js,Promise,Es6 Promise,我在NodeJS项目中使用Promises,希望更好地理解Promise.chains 我有一个公开的功能: 我希望用户调用的主库函数。它将返回一个承诺,然后用户需要处理解析和拒绝 这个主库函数将调用许多其他库函数,我想链接这些函数。因此,这些函数中的每一个都将返回如下承诺: mainLibraryFunction = function (arguments...) { return this.firstLibraryFn().then(secondLibraryFn).then(third

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

我有一个公开的功能:

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

这个主库函数将调用许多其他库函数,我想链接这些函数。因此,这些函数中的每一个都将返回如下承诺:

mainLibraryFunction = function (arguments...) {
  return this.firstLibraryFn().then(secondLibraryFn).then(thirdLibraryFn)...
}
每一个都将返回一个承诺,可以是拒绝,也可以是解决。我想要的是,如果任何库函数拒绝,那么将拒绝传递给下一个函数,我希望从MainLibraryFunction返回拒绝。因为否则我需要为每个Library函数实现错误案例的处理。因为它们中的每一个都将获得promise作为参数,所以我需要检查每个函数,这是我得到了解析还是拒绝了promise作为参数。然后,我需要将被拒绝的参数传递给所有函数,直到最后一个函数返回MainLibraryFunction。这是不明智的


那么,处理这个问题的最佳做法是什么?我应该在链子的末端加上钩环吗?我听说如果我在末端加上一个钩子,即使有人拒绝,它也会打破链子。然后从catch中,我可以从MainLibraryFunction返回Promise.reject()。

这个
方法接受两个参数:
oncompleted
onRejected
。如果不提供
onRejected
回调,则不会调用此特定的
。然后该链将转到实现
onRejected
的下一个处理程序

Promise.reject()
.然后(()=>console.log('on1'))
.catch(()=>console.log('catch 1'));//会接到电话的
承诺,拒绝
.那么(
()=>console.log('on2'),
()=>console.log('onRejected 2')//将被调用
)

.catch(()=>console.log('catch 2'));//不会被调用
如果不处理该错误,则该错误将从函数中返回,调用方可以使用.catch捕获该错误。如果一个承诺被拒绝,那么后续的then调用只有在它们具有错误处理程序(例如PROMITE)时才会被调用。then(SUCCESS Fn,failureFn)NB:应该是
返回这个。FIRSTLIBARYFn()。然后(…)
-注意parensThanks,我编辑它以更正它值得注意的是任何
。then()如果
.catch
没有重新拒绝承诺,则将调用
.catch
后的
。这是从错误中恢复的好方法。换句话说,您在链中任何位置插入的任何错误处理程序(
onRejected
onRejected
)都将捕获到链中该点的错误,之后,链的执行将一如既往地继续。