【问题标题】:NodeJS Package: error handlingNodeJS 包:错误处理
【发布时间】:2017-07-11 19:53:23
【问题描述】:

我有一些代码使用 Overwatch API 来获取一些数据。这是我目前拥有的:

OWoverallStats: (playerName, mode, region) => {
    mode = (typeof mode === 'undefined') ? 'competitive' : mode.toLowerCase();
    region = (typeof region === 'undefined') ? 'us' : region.toLowerCase();

    playerName = playerName.replace('#', '-');

    return fetch(`https://owapi.net/api/v3/u/${playerName}/stats`)
        .then(res => res.json())
        .then(data => {
            return data[region].stats[mode].overall_stats;
        });
}

如果您输入一个实际存在的 playerName,这可以正常工作。我用来测试的代码是:

core.OWoverallStats('Calvin-1337', 'quickplay', 'eu').then(data => {
    console.log(data.tier) // grandmaster
}).catch(e => {
    console.log(e);
});

在实际代码中,我可以检查错误代码是否为 404(播放器不存在),但我不知道该怎么办。我不想抛出错误,或者控制台记录它,就好像有人在 Discord Bot 中实现了这个说,我希望使用代码的人说出他们想对错误做什么。

【问题讨论】:

  • 如果你不想处理,为什么不直接扔给客户呢?
  • @Paul 我不太清楚你的意思/具体是什么。
  • 我的意思是不要捕捉到你没有准备好处理的错误。如果你这样做了,为了记录,再扔一次。

标签: javascript node.js error-handling


【解决方案1】:

当 fetch 有响应时,如果状态为 404 则简单地抛出一个错误。然后,代码的调用者可以捕获它并按照他的喜好进行处理。

例如,您的代码:

return fetch(`https://owapi.net/api/v3/u/${playerName}/stats`)
.then((res, meta) => {if (meta.status ===404) throw new Error('NoPlayer')})

代码的调用者:

core.OWoverallStats('Calvin-1337', 'quickplay', 'eu').then(data => {
}).catch(e => {
//this is where he can handle the error flexibly
});

你可能会看到other error handling practices here

【讨论】:

  • 我觉得很愚蠢,我有这个,但我认为无论我在catch 中输入什么,它都会抛出那个错误。哈哈。谢谢!
  • 说真的,我们每天都在学习,只是不断学习和改进:)
猜你喜欢
  • 2017-10-13
  • 2023-04-01
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多