Node.JS:为什么全局变量的内容在回调函数之外消失?

时间:2016-11-16 21:17:32

标签: javascript node.js callback

我写了以下代码:

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'。不幸的是,当我到达我的代码中的最后一行(回调之外)时,我看到设备又是空数组。 为什么会发生,我怎样才能让它按照我的意愿运作?

1 个答案:

答案 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