捕获块在节点获取中不起作用

Posted

技术标签:

【中文标题】捕获块在节点获取中不起作用【英文标题】:Catch block not working in node fetch 【发布时间】:2018-09-10 07:25:04 【问题描述】:

尝试学习,javascript。如果这真的是我缺少的基本薄,请原谅。

我正在尝试将 node-fetch 运行到错误的 url,我希望它应该被捕获并记录我的适当消息。但是,当我通过节点运行此文件时,它给了我未捕获的错误

    const fetch = require('node-fetch');

    fetch('http://api.icnd.com/jokes/random/10')
        .then(response => 
            response.json().then((data) => 
                console.log(data)
            );
        ).
        catch(error => 
            console.log('There is some error');
        );



(node:864) UnhandledPromiseRejectionWarning: FetchError: invalid json response body at http://api.icnd.com/jokes/random/10 reason: Unexpected token < in JSON at position 0
    at /Users/raheel/code/js-tutorial/node_modules/node-fetch/lib/index.js:254:32
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:118:7)
(node:864) 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:864) [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.

【问题讨论】:

当您尝试解析 json 响应时,错误可能在response.json() 行中?因为在请求本身失败时使用catch 使用fetch(…).then(res =&gt; res.json()).then(console.log, console.error) 【参考方案1】:

因为你没有抛出一个特定的错误来让 catch 块捕获。

const fetch = require('node-fetch');

fetch('http://api.icnd.com/jokes/random/10/api/1')
  .then(response => 
    if (response.ok) 
      response.json().then((data) => 
        console.log(data);
      );  
     else 
      throw 'There is something wrong';
    
  ).
  catch(error => 
      console.log(error);
  );

【讨论】:

【参考方案2】:

您可以像这段代码一样使用 catch 处理 fetch 错误

fetch("url").then(response=> response.json()).then(data=>
                 res.render("index",data:data);
        ).catch(error=>
            //handle error here
        );

【讨论】:

【参考方案3】:

它的这部分未被捕获:

 response.json()

因此为它附加一个 catch 处理程序:

 response.json().catch(...)

或者简单地返回它以便被其他处理程序捕获:

 return response.json()

【讨论】:

以上是关于捕获块在节点获取中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

内联块在 Internet Explorer 7、6 中不起作用

光滑的滑块在弹性容器中不起作用

从 XML 文件中获取节点在 php 中不起作用

捕获组在 NSRegularExpression 中不起作用

相机在phonegap中不起作用

fromAuthHeaderAsBearerToken 在节点中不起作用