В AngularJS каждый тогда требует улов? - PullRequest
0 голосов
/ 05 июня 2018

Я выполняю несколько вызовов ajax и хочу завершить все из них, прежде чем отобразить форму.Если есть ошибка, я хочу остановить обработку и просто показать первую обнаруженную ошибку.Я погуглил много статей, в том числе о StackOverflow, которые показывают, как связать операторы then.Но, похоже, я должен прикрепить к каждому из них зацепку, в противном случае только ошибки в последнем утверждении отлавливаются.В этом примере Lookup - это асинхронный вызов, который возвращает обещание, а 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);
  });

Если предположить, что есть хотя бы одна ошибка, есть ли способ использовать один перехват, который вызоветкогда обнаружена ПЕРВАЯ ошибка?

Это требование отличается от вопроса Дождитесь разрешения всех обещаний .Как указано в заголовке, этот пользователь хочет обрабатывать ВСЕ обещания.Я рад выйти, когда после ПЕРВОГО обещания с ошибкой.

1 Ответ

0 голосов
/ 05 июня 2018

Добавить возврат, поэтому результат обещания не будет выполнен, если один из внутренних сбоев:

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);
  });
...