从Javascript中的第三方函数中捕获错误

时间:2014-05-04 06:08:25

标签: javascript asynchronous error-handling try-catch catch-block

我正在使用ID3标记阅读器库https://github.com/43081j/id3&调用的示例函数采用这种格式......

id3(this.files[0], function(err, tags) {
  console.log(err, tags);
});

它适用于大多数文件,但有时会出现这样的错误

Uncaught URIError: URI malformed

我试图将此函数包装在try ... catch中以捕获这样的错误

try {
  id3(file, function(err, tags) {
    if (err) throw err;
    console.log('tags .. ' + tags);
  });
}
catch (e) {
  console.log('caught it!');
}

但实际上这个错误仍然无法保持原状。

我认为这可能与函数是异步的事实有关,但我真的很难理解如何防止这种情况并捕获错误。

最终我想将整个函数包装在一个承诺中,如下所示:

return new Promise(function(resolve, reject) {
  try {
    id3(file, function(err, tags) {
      if(err) throw err
      resolve(tags);
    });
  }
  catch (err) {
    reject('blank');
  }
}

但无论我尝试什么,拒绝方法永远不会被错误调用。

谢谢!

0 个答案:

没有答案