【问题标题】:Nodejs error handling in callback (xml-stream)回调中的 Nodejs 错误处理(xml-stream)
【发布时间】:2016-08-09 13:49:28
【问题描述】:

我使用 nodejs 的 xml-stream 库来解析一个大的 xml 文件。这很好用。 但是我注意到,如果在 xml-stream 事件的回调中出现类似 RefereceError 的问题,nodejs 只会在没有通知我的情况下退出或抛出错误。

一个简短的例子是以下代码:

var fs = require('fs');
var XmlStream = require('xml-stream');

var stream = fs.createReadStream('E:/jdown2/dblp/dblp.xml');
var xml = new XmlStream(stream);


xml.on('endElement: article', function (data) {
    console.log("article"); // works well
    var demo = functionThatNotExists(data);
    console.log("nodejs exit before this console log");
});

所以我的问题是,我怎样才能到达它,nodejs 告诉我有一个错误以及错误发生在哪里?

或者 xml-stream 不提供那个?

在一个普通的回调函数中,比如:

errorInCallback("test", function (err,data) {
    console.log(err, data)
});

function errorInCallback(data, cb) {
    var demo = functionThatNotExists(data);
    var err = null;
    return cb(err, demo)
}

一切都像预期的那样工作,nodejs 抛出一个 ReferenceError

有人能解释一下原因吗?也许可以解决这个问题?

提前致谢!

【问题讨论】:

    标签: javascript node.js error-handling


    【解决方案1】:

    尝试为error 事件添加处理程序:

    xml.on('error', function (err) {
        console.log(err);
    });
    

    【讨论】:

    • 您好,感谢您的帮助。但遗憾的是,这不起作用。我为错误添加了事件侦听器。但它不会触发或通知。它只退出节点
    • 嗯..也许您可以尝试在节点进程中侦听未捕获的异常?也许问题不在 xml-stream 中。 process.on('uncaughtException', function (exception) { console.log(exception); });
    【解决方案2】:

    您是否尝试使用从 xml.on 获取的数据调用不存在的函数?如果是这样,则错误来自那里,因此您应该处理它。

    var fs = require('fs');
        var XmlStream = require('xml-stream');
    
    var stream = fs.createReadStream('E:/jdown2/dblp/dblp.xml');
    var xml = new XmlStream(stream);
    
    xml.on('endElement: article', function (data) {
        console.log("article"); // works well
        try {
           var demo = functionThatNotExists(data);
           if (demo == null) {
             throw new Error('Something went wrong');
           }
        } 
        catch(e) {
         console.log(e.name + ": " + e.message);
        }
    
       console.log("nodejs exit before this console log");
      );
    

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 1970-01-01
      • 2022-01-19
      • 2016-12-21
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多