【问题标题】:Possible Unhandled Promise Rejection warning when axios call failsaxios 调用失败时可能出现未处理的 Promise Rejection 警告
【发布时间】:2021-07-07 03:52:50
【问题描述】:

每次如果有来自 API 调用的 504404 我都会收到警告:

可能的未处理承诺拒绝(id:12): ReferenceError:找不到变量:rej

这是我的编码方式:

function myFunction() {

    const fullURL = 'URL_THAT_I_HIT'
    const data = { "SOME_ID": ID_VALUE, }

    return new Promise((res, rej) => {
        try {
            axios.post(fullURL, data).then((response) => {
                res(response.data)
            }).catch((error) => {
                rej(error)
                alert(error)
            })
        } catch (error) {
            rej(error)
            alert(error)
        }
    })
}

据我了解,我正在处理rej,我什至将它包裹起来,这样我就可以拒绝。这是我下面的代码,我正在调用myFunction

     function fetchMyFunctionCall() {
        if (res === undefined) {
            alert("The call rejected")
        } else {
            console.log(res)
        }
    }

它显示错误消息,但我仍然看到警告。那么,如何正确处理fetchMyFunctionCall 中的拒绝?

【问题讨论】:

  • 你在哪里定义了变量rej?您确定它的名称相同并且正确导入了吗?
  • @Ajay 我的错,我没有复制那部分代码。我已经更新了我的问题,现在您可以看到我在哪里定义了变量 rej。我正在返回Promise
  • 可能删除try/catch?使用 try/catch 或 .catch(err),不能同时使用。如果您想将错误向上移动,那么只需在 catch 块中执行 throw error 即可。另外,axio 本身已经是一个 promise,所以你不需要创建 new Promise

标签: react-native promise


【解决方案1】:

我无法重现未定义变量的错误,但我认为您可以简化代码,如下所示:

function myFunction() {
  const fullURL = 'URL_THAT_I_HIT'
  const data = {
    "SOME_ID": ID_VALUE,
  }

  return axios.post(fullURL, data).then((response) => {
    return response.data
  });
}

myFunction().then((data) => {
  console.log(data)
}).catch((error) => {
  console.log(error)
})

Axios 本身返回一个 Promise,所以不需要显式返回一个。

【讨论】:

  • 我之所以使用Promise,是因为在我正在构建的应用程序中有一些 API 调用需要更长时间。例如,有时我必须调用一个 API,然后使用该调用中的数据,我必须向不同的 API 发送多个调用,我使用 Promise All 来处理它。您分享的方法简单易懂,但在我提到的这种情况下是否可行?如果没有,那么您能否更新您的答案以包含Promise
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 2022-01-01
  • 2020-07-27
  • 2021-06-21
  • 2018-02-13
  • 1970-01-01
相关资源
最近更新 更多