javascript - 未处理的PromiseRejection警告: Unhandled promise rejection for API

标签 javascript node.js json es6-promise

我正在尝试 console.log 天气 API 的一些数据,但是当我查找位置时收到错误消息

UnhandledPromiseRejectionWarning:未处理的 promise 拒绝。此错误的根源是在没有 catch block 的情况下抛出异步函数内部,或者拒绝未使用 .catch() 处理的 Promise。 (拒绝 ID:4)

到目前为止,我的代码在我的服务器上

app.post('/weather', (req, res) => {
    const url = `https://api.darksky.net/forecast/${DARKSKY_API_KEY}/${req.body.latitude},${req.body.longitude}?units=auto`
    axios({
      url: url,
      responseType: 'json'
    }).then(data => res.json(data.data.currently)).catch(error => { throw error})
  })

app.listen(3000, () => {
    console.log("Server has started")
})

和我的 JavaScript

  fetch('/weather', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    },
    body: JSON.stringify({
      latitude: latitude,
      longitude: longitude
    })
  }).then(res => res.json()).then(data => {
    console.log(data)
    setWeatherData(data, place.formatted_address)
  }).catch(error => { throw error})
})

最佳答案

您的代码:

axios(...).then(...).catch(error => { throw error;})

如果您的 axios() 调用或 .then() 处理程序被拒绝,将导致该警告。

当您在 .catch() 处理程序中引发错误时,会使 Promise 链处于拒绝状态,并且您没有进一步的代码来捕获该拒绝。

您的客户端代码也存在完全相同的问题。

<小时/>

您还应该了解 .catch(error => { throw error;}) 绝对没有任何用处。它捕获拒绝,然后抛出,这只是再次拒绝链。而且,由于没有其他任何东西在监听 promise 链,所以这是一个未经处理的拒绝。

您需要做的是以某种适合您的应用程序的方式实际处理错误,例如将错误状态发送回客户端。

axios(...).then(...).catch(error => {
    console.log(err);
    res.sendStatus(500);
});

并且,在客户端中,您可以向用户显示错误消息或仅记录错误。如果没有人监听到错误,则重新抛出错误对您没有任何好处。

关于javascript - 未处理的PromiseRejection警告: Unhandled promise rejection for API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59638580/

相关文章:

json - 如何将 postgresql 列的文本完全转换为 jsonb

c# - 如何在 Json 中将日期时间变量的默认值设置为 null

javascript - 如何在页面开始加载之前将参数附加到 URL?

node.js - 如何在 Ubuntu 服务器中使用 PM2 部署 express js

authentication - 建立套接字后的socket.io身份验证

json - Golang转换JSON

javascript - 我无法在 javascript 中使用此方法转换二进制文件,但它可以在 java 中使用

javascript - 如何检测 JavaScript 中的链式函数调用?

JavaScript 正则表达式 : Only matching the last pattern

node.js - 如何使用node.js转换为ascii