首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在try-catch块中也停止执行的异常。

即使在try-catch块中也停止执行的异常。
EN

Stack Overflow用户
提问于 2016-09-22 09:32:43
回答 1查看 2K关注 0票数 1

我有一些代码循环遍历URL列表并使用获取它们,我遇到了一个问题,因为如果其中一个URL是格式错误的指针,抛出一个停止执行的URIError

我想要的是标记坏的URL,但是循环继续,我有下面的代码,其中包括一个try-catch块,但是它仍然抛出了一个错误。

代码语言:javascript
复制
URIError: URI malformed
    at decodeURIComponent (native)
    at parseSetCookieString (node_modules/needle/lib/cookies.js:44:35)
    at node_modules/needle/lib/cookies.js:54:18
    at Array.reduce (native)
    at Object.parseSetCookieHeader [as read] (node_modules/needle/lib/cookies.js:53:17)
    at ClientRequest.<anonymous> (node_modules/needle/lib/needle.js:418:30)
    at ClientRequest.g (events.js:199:16)
    at ClientRequest.emit (events.js:107:17)
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:426:21)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)

循环看起来像这样

代码语言:javascript
复制
for (var i =0; i < items.length; i++)
  {
    var url = items[i].link;
    var options = {};
    (function(inner_url){
      try {
        needle.get(inner_url, options, function(err, res) {
          if(err) {
            console.log(err)
          } else {
            console.log('success')
          }
        })
      } catch (URIError) {
        console.log(URIError)
      }
  })(url)
  }

有什么指示吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-09-22 10:16:04

当您使用异步代码时,尝试/捕捉将无助于您。

例如

try {var a = a.b.c.d.s}catch(e){}会工作的。

try{requestToSomeURL or any async operation}catch(e){}不会。

原因是当您使用这段代码运行异步JavaScript (上下文丢失)并转到下一个代码时。当事件循环触发回调函数时,它将获得异常并显示给您。

要解决这个问题,需要将错误处理添加到needle.get方法中。在这种情况下,回调函数将传递所有错误。

或者,如果这是一个第三方库,您需要在执行GET操作之前检查您的url。

也请查看这个答案以获得更多信息。

http://ruben.verborgh.org/blog/2012/12/31/asynchronous-error-handling-in-javascript/

异步函数永远不会抛出吗?

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39635319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档