【问题标题】:Ignore (or return) if there is error in node-fetch request如果节点获取请求中有错误,则忽略(或返回)
【发布时间】:2019-06-26 11:32:56
【问题描述】:
try {

     fetch(url)
          .then(res => res.json())
          .then(data => {
             console.log(data);
          });
 } 
  catch (e) {
     console.log(e);
  }

所以有时我会从中得到ECONNRESET 错误,我希望以某种方式忽略它。

【问题讨论】:

  • Fetch 是异步的,并返回一个承诺。在承诺完成其异步代码所做的任何事情之前,您得到的错误不会被抛出(在这种情况下,获取 URL 的响应或连接失败)。同时,您的 try...catch... 语句在异步代码完成之前,在抛出错误之前继续。因此,通过 Promise,您可以通过将 .catch(callback) 附加到错误来捕获错误,类似于 .then()。回调是一个接收错误作为其唯一参数的函数。
  • @IceMetalPunk 但我应该把它放在哪里?在获取 json 之前还是最后?
  • 您可以在 Promise 链中的任何位置附加 .catch,就像您可以在链中的任何位置附加 .then 一样。它将捕获在链中它之前调用的任何函数中抛出的错误。因此,如果您只想捕获请求中的错误,例如连接错误,请将其放在 fetch 和 JSON 解析之间。如果你想让它捕获 all 错误,请将它放在 Promise 链的末尾。

标签: javascript node.js node-fetch


【解决方案1】:

尝试以下方法:

fetch(url)
  .then(
    function(response) {
      if (response.status !== 200) {
        console.log('Looks like there was a problem. Status Code: ' +
          response.status);
        return;
      }

      // Examine the text in the response
      response.json().then(function(data) {
        console.log(data);
      });
    }
  )
  .catch(function(err) {
    console.log('Fetch Error :-S', err);
  });

如果不够,请在与检查状态相同的位置检查 ECONNRESET

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多