gpt4 book ai didi

javascript - 如何在nodejs中调用 setImmediate before/above .on ('data' ) fast-csv

转载 作者:行者123 更新时间:2023-11-28 05:56:08 25 4
gpt4 key购买 nike

我正在使用 fast-csv ( https://www.npmjs.com/package/fast-csv ) 来解析 csv 文件。

它可能有 10k 条记录,因此需要花费大量时间来解析,并且该服务器上的几乎所有其他操作都会被阻止。

所以我想使用“setImmediate()”来延迟记录的执行/解析。以便其他进程也获得CPU时间。

csv
.fromPath(csvfile, {headers: true, discardUnmappedColumns:true, ignoreEmpty:true})
.validate( function(record) {
//some validations here
})
.on("data-invalid", function(record){
logger.error("Validation of record failed:" + record);
})
.on("data", function(record){
// i know i can add a setImmediate here but i dont want the code to parse all the records in csv at a go.
// i want to call setImmediate above the .on("data") so that the contacts are validated/parsed slowly(when they get cpu as per setImmediate)
});

上述或任何其他方式来控制/延迟 .on("data")。

根据我的搜索,它无法控制,因为它是一个流。

欢迎任何建议!

最佳答案

So i want to use setImmediate() to delay the execution/parsing of records...or any other way to control/delay the .on("data")

setImmediate() 将无法帮助您;即使它会屈服于事件循环,但由于正在读取 CSV 文件,您的管道已经屈服于事件循环。

相反,您可以使用类似 concurrent-map-stream 的模块限制正在执行的并发数据库查询的数量,这可能是您遇到的真正问题。

例如,将查询数量限制为 100:

function queryWorker(record, done) {
performQuery(record, done);
};

var queue = require('concurrent-map-stream');
var queueStream = queue(queryWorker, 100).on('data', function(record) {
...
}).on('close', function() {
// done
});

csv.fromPath(...).pipe(queueStream);

关于javascript - 如何在nodejs中调用 setImmediate before/above .on ('data' ) fast-csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37657516/

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