2016-04-27 42 views
4

我一直在試圖找到庫(以避免重新發明輪子)來讀取CSV文件上的單行並將值推送到下游過程。以每秒1行的速度解析CSV

但是,我需要讀取和處理每秒只發生一次。有沒有辦法在Node上做到這一點?

+1

使用async.parallel [async.js](https://github.com/caolan/async)並在回調中使用settimeout。 – user2347763

回答

3

最近我遇到了一個類似的問題,因爲我需要一種方法來一次讀取一行文件,而不會移動到下一個文件,直到完成前一個文件的處理。

我用promise,stream.pause()stream.resume()解決了它。你可以這樣做:

const Promise = require('bluebird');       
const fs = require('fs');         
const byline = require('byline');       

function readCSV(file, callback) { 
    let stream = fs.createReadStream(file); 
    stream = byline.createStream(stream); 
    stream.on('data', (line) => { 
    stream.pause(); 
    Promise.resolve(line.toString()) 
     .then(callback) 
     .then(() => setTimeout(() => stream.resume(), 1000)); 
    }); 
} 

readCSV('file.csv', console.log);