如何修复在前一个承诺的.then块中处理的.catch beeing中返回的停止承诺。即.catch应该留在.catch

时间:2019-06-23 23:16:16

标签: javascript reactjs promise

然后,一个Promise调用另一个Promise,而内部的Promise从捕获.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 个答案:

答案 0 :(得分:3)

在内部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,但是在大多数情况下,只要可以正确处理错误,就可以只有一个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;
    })
}

答案 1 :(得分:0)

.catch旨在处理错误,因此之后,promise链将继续与下一个.then继续。要继续下一个.catch,您必须从throw内部重新.catch错误或返回被拒绝的承诺。