我写了以下代码:
var csv = require('csv-parser')
var fs = require('fs')
var devices = []
fs.createReadStream('devices.csv')
.pipe(csv())
.on('data', function (data) {
devices.push(data)
});
console.log(devices)
line devices.push(data)将csv文件中的每一行插入全局数组' devices'。不幸的是,当我到达我的代码中的最后一行(回调之外)时,我看到设备又是空数组。 为什么会发生,我怎样才能让它按照我的意愿运作?
答案 0 :(得分:3)
流处理是异步的(您可以将其视为在后台运行事件通知,其余代码继续有机会运行)。当您执行.pipe()
和.on('data')
时,您只是启动流操作,然后设置一个将在未来被称为某个不确定时间的事件处理程序。其余代码继续运行。
因此,您的console.log(devices)
代码行在流解析之前运行。您需要注册一个表示流解析结束的事件,然后查看该事件处理程序中的devices
数组。
var csv = require('csv-parser')
var fs = require('fs')
var devices = []
fs.createReadStream('devices.csv')
.pipe(csv())
.on('data', function (data) {
devices.push(data)
}).on('end', function() {
// use the devices array in here
console.log(devices);
});
node.js流事件记录在案here。