javascript - 带有 while 循环的 NodeJS 结束事件

标签 javascript node.js sax

我尝试使用 sax 迭代这个大的 xml 文件,这里是代码:

'use strict';
const fs = require('fs');
const sax = require('sax');

let rowsAdded = 0;
let rows = [];
let options = {
    encoding: 'utf8',
    mode: 0o444
};
let strict = true,
feedFile = 'Comments.xml',
saxStream = sax.createStream(strict);
saxStream.on('opentag', node => {
    if(rowsAdded === 5) {
        return saxStream.end();
    }
    // I only need nodes named 'row'
    if(node.name === 'row') {
        rowsAdded++;
        // If the name is 'row' and `attribute` prop exists, push it. 
        if(node.attributes) rows.push(node.attributes);
    }
})
.on('error', () => {
})
.on('end', () => {
    console.log('Done reading:', rowsAdded);
    // If you remove this while loop the above console will called only once
    while(rowsAdded--) {

    }
});
fs.createReadStream(feedFile, options).pipe(saxStream);

console.log 将记录 Done reading: 5 大约 43 次,如果我注释掉 while 循环,它只会控制台完成阅读:5 一次!,我做错了什么吗?是错误吗?

最佳答案

当您从 saxStream.on('opentag') 返回时,这意味着您已完成对该标记的处理,但解析器会继续处理直到完成整个 xml。

关于javascript - 带有 while 循环的 NodeJS 结束事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35245026/

相关文章:

node.js - sails +蒙戈+水线。按填充集合中的文档数排序

mysql - 如何使用 Node 流向mysql插入大数据?

javascript - 在 Javascript 或 jQuery 中获取给定年份和星期的日期

javascript - 通过更改构造函数属性动态替换原型(prototype)

node.js - Nuxt2 不适用于 Node 的最新 LTS (v18)

java - XML 不使用转义字符进行解析

java - 当文档以小写 <!doctype 开头时, Karate HTML 解析抛出 SaxException

javascript - 引用在 JSDoc 中输入不同的文件而不导入

javascript - 在 XSLT 中创建一个简单的模态弹出窗口

android - 使用 android SAX 包 mathods 解析 Xml 以获取 android 中的属性值