gpt4 book ai didi

javascript - UnhandledPromiseRejectionWarning,但我正在处理错误?

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:51 27 4
gpt4 key购买 nike

我收到以下错误:

Houston we got an err at getGames in index.js
(node:72197) UnhandledPromiseRejectionWarning: #<Object>
(node:72197) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:72197) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
error at getGames rp

相关代码如下:

从 API 获取数据的帮助函数(rp 是 request-promise-native)

const getGames = async () => {
return await rp(`https://api.steampowered.com/IDOTA2Match_570/GetTopLiveGame/v1?key=${KEY}&partner=0`)
.catch(err => console.log('error at getGames rp'))
.error(err => console.log('actual error at getGames rp'))
}

我每 5 秒调用一次

app.get('/api/update', async (req, res) => {
const data = await getGames()
.catch(err => console.log('Houston we got an err at getGames in index.js'))
const dataJson = JSONbig.parse(data);

if (dataJson.game_list && dataJson.game_list.length) {
for (let i = 0; i < dataJson.game_list.length; i++) {
const game = dataJson.game_list[i];
...

“/api/update”端点每 5 秒调用一次。我收到上述错误。我的 for 循环停止迭代。我希望它跳过出错的那个,但它说我没有处理该错误。我有 catch block ,甚至有 error block ,但我似乎无法弄清楚为什么会发生这种情况。

我也尝试过手动调用:

`https://api.steampowered.com/IDOTA2Match_570/GetTopLiveGame/v1?key=${KEY}&partner=0`

在 postman 中快速连续多次,但 postman 从不出错。所以问题出在我的代码中的某个地方。我已经处理了所有错误,所以我似乎找不到我没有处理的错误。

最佳答案

有几个问题:

  • 仅在您可以实际处理错误的地方捕获。在这里,您可能只想在 .get 回调中捕获(否则,如果您在 getGames 中使用 .catch,您将返回一个已解析的 promise ,而不是被拒绝的 promise )

  • 发生错误时,不要尝试解析数据(因为它不会被填充) - 尝试解析和迭代它会导致更多错误

  • 拥有一个只有一个立即返回的 awaitasync 函数是没有意义的

const getGames = () => {
return rp(`https://api.steampowered.com/IDOTA2Match_570/GetTopLiveGame/v1?key=${KEY}&partner=0`);
};

app.get('/api/update', async (req, res) => {
const data = await getGames()
.catch(err => {
console.log('Houston we got an err at getGames in index.js');
// handle error
});
if (!data) {
// There was an error
return;
}
const dataJson = JSONbig.parse(data);
// rest of the code
});

关于javascript - UnhandledPromiseRejectionWarning,但我正在处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com