gpt4 book ai didi

javascript - 逐行读取文件并在 node.js 中执行分析?

转载 作者:行者123 更新时间:2023-11-30 14:06:15 25 4
gpt4 key购买 nike

我有一个文件,我想逐行读取它,对于提取的每一行,我都执行一些昂贵的分析,然后将结果保存到数据库中。简而言之,我有这样的东西:

const fs = require('fs');
const path = require('path');
const readline = require('readline');

async function analyzeAndSave(url) {
// Removed for brevity, but this function takes a minute or so finsh.
}

async function run() {
try {
const dataPath = path.join(path.dirname(require.main.filename), 'data/urls.txt');

const rl = readline.createInterface({
input: fs.createReadStream(dataPath),
});

let line_no = 0;
rl.on('line', async (url) => {
line_no++;
logger.info(`Analyzing: ${url}`);
await analyzeAndSave(url);
});
} catch (err) {
// Error caught.
logger.error(err);
}
}

run();

问题在于,我注意到它不会等待一行分析完成,而是尝试执行多个分析实例。我可以看到这一点,因为它最初会打印所有带有 logger.info('Analyzing: ' + url); 的行。所以,它不是按顺序执行的。我如何确保在移动到下一行之前完成一行?

最佳答案

readline 接口(interface)正在异步发出“on”事件,并且在其中一个事件中执行 await 不会阻止其他事件被触发。相反,您可以像这样缓冲数组中的行:

r.on('line', url => urls.push(url));
r.on('close', async () => {
for (const url of urls) {
await analyzeAndSave(url);
}
});

其中 urls 在创建 readline 接口(interface)之前被初始化为一个空数组。

关于javascript - 逐行读取文件并在 node.js 中执行分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55325415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com