我正在执行多个ajax调用,我希望在显示表单之前完成所有这些调用。如果有错误,我想停止处理,只显示遇到的第一个错误。我搜索了很多文章,包括StackOverflow,它们展示了如何链接then语句。但似乎我必须在每个附加一个捕获,否则只捕获最后一个语句中的错误。在此示例中,Lookup是一个异步调用,它返回一个promise,ShowError处理错误:
Data.Lookup("a")
.then(function(result) {
vm.a = result;
Data.Lookup("b")
.then(function(result) {
vm.b = result;
Data.Lookup("c")
.then(function(result) {
vm.c = result;
})
.catch(function(response) {
vm.showError(response);
});
})
.catch(function(response) {
vm.showError(response);
});
})
.catch(function(response) {
vm.showError(response);
});
假设至少有一个错误,有没有办法使用单个catch,当遇到FIRST错误时会触发?
这与问题Wait for all promises to resolve的要求不同。如标题中所述,该用户想要处理所有承诺。我很高兴在FIRST承诺出错后退出。
答案 0 :(得分:2)
添加return,如果内部失败,则结果承诺失败:
Data.Lookup("a")
.then(function(result) {
vm.a = result;
return Data.Lookup("b")
.then(function(result) {
vm.b = result;
return Data.Lookup("c")
.then(function(result) {
vm.c = result;
});
});
})
.catch(function(response) {
vm.showError(response);
});