在AngularJS中,每次都需要捕获吗?

时间:2018-06-05 19:06:42

标签: angularjs error-handling try-catch

我正在执行多个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承诺出错后退出。

1 个答案:

答案 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);
  });