回调中的Nodejs错误处理(xml-stream)

时间:2016-08-09 13:49:29

标签: javascript node.js error-handling

我使用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

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

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您是否尝试使用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");
  );