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

Javascript Node.JS:为什么全局变量的内容在回调函数之外消失?,javascript,node.js,callback,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) 行设备。推送(数据)将csv文件中的每一行插入

我编写了以下代码:

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)
行设备。推送(数据)将csv文件中的每一行插入全局数组“设备”。不幸的是,当我到达代码中的最后一行(回调之外)时,我看到设备再次是空数组。
为什么会发生这种情况,我怎样才能让它按我所希望的那样工作

流处理是异步的(您可以将其视为在后台运行,并带有事件通知,其余代码仍有机会运行)。当您执行
.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流事件是有文档记录的。

您可以将其向后放置。当数组仍然为空时,首先到达代码中的最后一行,然后在执行回调时,它将被数据填充。