首页 > 解决方案 > node.js readline:“TypeError:rl 不可迭代”

问题描述

当我尝试运行我的代码时,出现此错误:

file:///C:/Users/rb03/Documents/Testing/connect.js:27
for (const line of rl) {
                   ^

TypeError: rl is not iterable
    at file:///C:/Users/rb03/Documents/Testing/connect.js:27:24
    at Connection.<anonymous> (C:\Users\rb03\Documents\Testing\node_modules\mysql2\lib\connection.js:777:13)
    at Object.onceWrapper (node:events:514:26)
    at Connection.emit (node:events:394:28)
    at ClientHandshake.<anonymous> (C:\Users\rb03\Documents\Testing\node_modules\mysql2\lib\connection.js:121:14)
    at ClientHandshake.emit (node:events:394:28)
    at ClientHandshake.execute (C:\Users\rb03\Documents\Testing\node_modules\mysql2\lib\commands\command.js:44:10)
    at Connection.handlePacket (C:\Users\rb03\Documents\Testing\node_modules\mysql2\lib\connection.js:456:32)
    at PacketParser.onPacket (C:\Users\rb03\Documents\Testing\node_modules\mysql2\lib\connection.js:85:12)
    at PacketParser.executeStart (C:\Users\rb03\Documents\Testing\node_modules\mysql2\lib\packet_parser.js:75:16)

我的代码如下:

connection.connect(function(err) {
    if (err) throw err;
    console.log('Connected!');

    const rl = readline.createInterface({ input: fs.createReadStream('./Logs/Outputs/split.lines.txt') });

    let total = 0;
    let buff = [];
    for (const line of rl) {
        buff.push([line]);
        total++;
        if (buff.length % 2000 === 0) {
            connection.query("INSERT INTO test (line, timestamp, errortype) VALUES ?");
            console.log(total);
            buff = [];
        };
    };

    if (buff.length > 0) {
        connection.query("INSERT INTO test (line, timestamp, errortype) VALUES ?");
        console.log(total);
    };

    connection.end();
});

有人知道该怎么做吗?谷歌没有显示“rl is not iterable”,仅显示“rl is not async iterable”

提前致谢!

标签: node.jsreadline

解决方案


要进行迭代,它需要:

for await (const line of rl)

这需要在一个async函数中。你错过了await.

rl有一个asyncIterator,但不是常规迭代器,因此您需要 使await迭代工作。


如果不想迭代,可以使用常规事件并监听line事件。

rl.on('line', line => {
   // process line here
});

推荐阅读