首页 > 解决方案 > 如何修复在前一个承诺的 .then 块中处理的 .catch 中返回的停止承诺。即 .catch 应该留在 .catch

问题描述

然后一个promise调用另一个promise,内部promise从.then块中的catch外部进程返回

我在这里和谷歌搜索过。尝试使用简单的 try.. catch。但不适用于调用承诺

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

标签: javascriptreactjspromise

解决方案


再次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 确实需要在遇到错误时执行特定操作,并且您的外部调用者也需要在遇到错误时执行其他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;
    })
}

推荐阅读