Как исправить стоп-обещание, возвращенное в .catch, обработанном в блоке .then предыдущего обещания.Т.е. .catch должен оставаться в .catch - PullRequest
0 голосов
/ 24 июня 2019

Затем обещание вызывает другое обещание, и внутреннее обещание возвращается из процесса catch внешнего процесса в блоке .then

Я искал здесь и в Google в целом.Пытался использовать простую попытку .. поймать.Но не будет работать с вызовом обещание

assignResolver(data)

      .then(function(resp) {
        console.log("map then");
        console.log(resp);
       })
      .catch(function(err) {
        console.log("map catch");
        console.log(err);
      });

export async function assignResolver(data) {
  csrf();

  return api
    .post("/api/task/assignResolver", data)
    .then(function(res){
      console.log("in api then block");
      return res.data;
    } )
    .catch(function(err) {
      console.log("in api then block");
      console.log(err);
  });
}

Ответы [ 2 ]

3 голосов
/ 24 июня 2019

Просто throw снова ошибка, когда внутри catch, и она будет обработана во внешнем catch, а не во внешнем .then:

export async function assignResolver(data) {
  csrf();

  return api
    .post("/api/task/assignResolver", data)
    .then(function(res){
      console.log("in api then block");
      return res.data;
    } )
    .catch(function(err) {
      console.log("in api then block");
      console.log(err);
      throw err;
  });
}

Но это немного странно - обычно имеет смысл вводить catch только в одном месте. Например, если assignResolver действительно нужно , чтобы иметь возможность сделать что-то конкретное при обнаружении ошибки, а внешнему абоненту необходимо иметь возможность сделать что-то else при обнаружении ошибки как хорошо, наличие двух catch es может быть вариантом, но в большинстве случаев вы можете просто иметь один catch везде, где ошибка может быть обработана правильно.

Здесь, если assignResolver самому не нужно что-то предпринять при обнаружении ошибки, оставьте его catch полностью:

export async function assignResolver(data) {
  csrf();

  return api
    .post("/api/task/assignResolver", data)
    .then(function(res){
      console.log("in api then block");
      return res.data;
    })
}
0 голосов
/ 24 июня 2019

.catch предназначен для обработки ошибки , поэтому после этого цепочка обещаний будет регулярно продолжаться со следующей .then. Чтобы продолжить со следующей .catch, вы должны повторно throw указать ошибку изнутри .catch или вернуть отклоненное обещание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...