我觉得这应该很容易,但我一直在努力奋斗。
我的代码看起来像这样(显然这是一个简化的例子)。
getPromise(param1, param2)
.then(function (results) {
// do something that causes an error:
var err1 = new Error()
throw err1;
})
.then(function (results) {
getAnotherPromise(param1)
.then(function (res) {
// do something else that might cause an error:
var err2 = new Error()
throw err2;
})
})
.then(function (results) {
// deal with the results of above code
})
.fail(function (error) {
// handle error
})
问题是err2
永远不会导致调用.fail
处理程序。 err1
按预期处理,但err2
只是消失了。我已经尝试在负责生成.fail
的{{1}}之后添加另一个.then
处理程序,该err2
只会重新抛出err2
,但这不会改变任何内容。
如何编写一个处理err1
和err2
的错误处理程序?
答案 0 :(得分:3)
Q
,否则 return
无法处理嵌套的承诺。所以,你的代码应该是这样的:
getPromise(param1, param2).then(function (results) {
// do something that causes an error:
throw new Error('error 1');
}).then(function (results) {
return getAnotherPromise(param1).then(function (res) {
// do something else that might cause an error:
throw new Error('error 2');
})
}).then(function (results) {
// deal with the results of above code
}).fail(function (error) {
// handle error
})
实际上,promise值既有传播也有错误,所以你可以用以下方式编写代码:
getPromise(param1, param2).then(function (results) {
// do something that causes an error:
throw new Error('error 1');
}).then(function (results) {
return getAnotherPromise(param1)
}).then(function (res) {
// do something else that might cause an error:
throw new Error('error 2');
}).then(function (results) {
// deal with the results of above code
}).fail(function (error) {
// handle error
})