3

我正在使用 sax-js 读取大型 xml 文件。解析器完成后,我无法让程序退出。这是脚本的形状,已删除解析器逻辑。

    var fs = require('fs');
    var sax = require('sax');

    var feedFile = 'foo.xml';
    var saxStream = sax.createStream(true)
    .on('opentag', function(node) { // do stuff })
    .on('end', function() {
         console.log("parser end event");
    });

    var options = {
         flags: 'r',
         encoding: 'utf8',
         mode: 0666,
         bufferSize: 1024
    };

    fs.createReadStream(feedFile, options, function(err) {
        throw err;
    })
    .on('end', function() {
        console.log("read stream end event");
    })
    .pipe(saxStream);

一切正常。控制台收到这样的消息

    read stream end event
    parser end event

然后该过程应该退出。它不是。我错过了什么?


编辑:我错过了什么。 有一个资源仍然打开,因此节点无法退出。诱惑是开始尝试在某个地方、任何地方调用 process.exit()。在这种情况下,我自己尝试过,但它破坏了东西。

我的脚本无法退出,因为我有一个打开的 mongodb 连接(由 mongoose 管理)。这基本上(不是详细)是什么修复了它:

    saxStream.on('end', function() {
        console.log("parser end event");
        mongoose.disconnect();
    };
4

0 回答 0