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.
})
如何从嵌套的promises中获取异常以冒泡到父承诺?
答案 0 :(得分:3)
使用PromiseA().then(function(){
return PromiseB();
}).catch(function (e) {
// I want exceptions thrown in the nested promise chain to end up here.
})
关键字
您的代码可以简化为:
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.
})
修改强>
不确定这是否是正确的方法,但是如果涉及承诺取消并且您只想冒泡错误流,则可以将您的承诺包装在自定义的Promise中,它永远不会解析但会抛出错误(如果它发生):< / p>
/foo/:some_id/bar/:id
答案 1 :(得分:2)
首先,避免使用嵌套的promises。还总是使用return
语句从嵌套函数返回promise结果。在您的示例中,永远不会使用PromiseB
结果,并且在解析PromiseB
之前将解析主承诺链。
在您目前的情况下,您可以使用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
});