蓝鸟 – 如何在嵌套承诺中传播错误

PromiseA().then(function(){ PromiseB().catch(function (e) { throw e; }) }).catch(function (e) { // I want exceptions thrown in the nested promise chain to end up here. }) 

我如何从嵌套的承诺中获得exception,以达到父承诺?

       

网上收集的解决方案 "蓝鸟 – 如何在嵌套承诺中传播错误"

使用return关键字,

你的代码可以简化为:

 PromiseA().then(function(){ return PromiseB(); }).catch(function (e) { // I want exceptions thrown in the nested promise chain to end up here. }) 

编辑:

不知道这是否是正确的方法,但如果承诺取消涉及,你只想冒泡错误stream,你可以把自己的承诺包装在自定义承诺,永远不会解决,但抛出错误(如果它发生):

 PromiseA().then(function(){ var myPromise = PromiseB().then...; return new Promise(function(resolve, reject){ myPromise.catch(reject) }) }).catch(function (e) { // I want exceptions thrown in the nested promise chain to end up here. }) 

首先,避免使用嵌套的承诺。 也总是使用return语句来返回来自嵌套函数的promise结果。 在你的例子中, PromiseB结果从来没有被使用,并且在PromiseBparsing之前,主promise链将被parsing。

在你当前的情况下,你可以使用Promise.reject函数来将错误冒泡给父承诺:

 PromiseA() .then(function() { return PromiseB() .catch(function (err) { // TODO: error processing return Promise.reject(err); }); }) .catch(function(err) { // Here you'll get the same err object as in first catch });