蓝鸟 – 如何在嵌套承诺中传播错误
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
结果从来没有被使用,并且在PromiseB
parsing之前,主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 });