【发布时间】:2017-02-02 06:51:37
【问题描述】:
我有这段代码,它只是从 .csv 文件中读取数据并将其转换为 json 并记录数据:
const fs = require('fs');
const path = require('path');
const sd = path.resolve(__dirname + '/fixtures/SampleData.csv');
const strm = fs.createReadStream(sd).setEncoding('utf8');
const Rx = require('rxjs/Rx');
const csv2json = require('csv2json');
const dest = strm
.pipe(csv2json({
separator: ','
}));
dest.on('error', function(e){
console.error(e.stack || e);
})
const obs = Rx.Observable.fromEvent(dest, 'data')
.flatMap(d => Rx.Observable.timer(100).mapTo(d))
obs.subscribe(v => {
console.log(String(v));
})
代码所做的是在 100 毫秒延迟后记录所有数据。 我其实是想延迟每一行数据,并在一小段延迟后记录每一行。
上面的代码没有做到这一点 - 控制数据记录速率的最佳方法是什么?
假设:所有数据行几乎同时进入,因此所有数据都延迟了 100 毫秒,因此它们最终几乎同时打印。我只需要在记录前一行之后开始延迟下一行。
下面的代码似乎和上面的计时器做同样的事情:
const obs = Rx.Observable.fromEvent(dest, 'data')
.delay(100)
【问题讨论】: