Javascript Nodejs读线回调
我正在研究回调,由于某些原因,我无法正确地得到它。。。 我想读取一个文件,并将其数据保存到一个全局变量中,以便以后使用 以下是我到目前为止的情况:Javascript Nodejs读线回调,javascript,node.js,Javascript,Node.js,我正在研究回调,由于某些原因,我无法正确地得到它。。。 我想读取一个文件,并将其数据保存到一个全局变量中,以便以后使用 以下是我到目前为止的情况: var fs = require("fs"); var readline = require("readline"); var i = 0; var total = 66; //put the total foldernames or total images (same number) var folder_names = []; var data
var fs = require("fs");
var readline = require("readline");
var i = 0;
var total = 66; //put the total foldernames or total images (same number)
var folder_names = [];
var data = [];
lineReader = readline.createInterface({
input: fs.createReadStream("folder-names and data.txt")
});
lineReader.on('line', function(line, dataCollector) {
if(i<66)
folder_names.push(line);
else
data.push(line);
dataCollector(folder_names, data);
i++;
});
var dataCollector = function(folder_names, data) {
//console.log(folder_names);
}
console.log(folder_names[0]); //should have a value now.
var fs=require(“fs”);
var readline=需要(“readline”);
var i=0;
var总计=66//放入总文件夹名或总图像(相同数字)
var文件夹_名称=[];
var数据=[];
lineReader=readline.createInterface({
输入:fs.createReadStream(“文件夹名称和数据.txt”)
});
lineReader.on('line',函数(line,dataCollector){
如果(i您在此处跟踪数据采集器
标识符:
lineReader.on('line', function(line, dataCollector) {
它将dataCollector
声明为回调的第二个参数,在脚本的顶层隐藏标识符
不会记录它为其回调提供了第二个参数,因此它应该如下所示:
lineReader.on('line', function(line) {
请回答你的问题:
不,不应该。为什么:
在您的情况下,您可能希望在close
事件处理程序中执行console.log
:
lineReader
.on('line', function(line) {
if(i<66)
folder_names.push(line);
else
data.push(line);
dataCollector(folder_names, data);
i++;
})
.on('close', function() {
console.log(folder_names[0]); // has its values now
});
lineReader
.on('line',函数(line){
如果(i您使用var
声明您的函数,这将在到达该行时执行。因此,当您在回调中调用它时,该函数尚未定义。为了能够使用它,请将其移动到lineReader之前。在('line',function(){})
上,或者(更好)这样定义它:
function dataCollector(folder_names, data) {
/* Your function */
}
这样做,您的函数将在脚本执行之前声明,因此在您到达回调时它就存在了。我想在lineReader函数中填入folder\u names变量。我将更新我的问题。@FlorinPop:您当前的问题是关于为什么会出现错误“dataCollector不是函数”。问题并不意味着是移动目标。这回答了这个问题。我在描述中告诉了我想要的:“我想读取一个文件,并将其数据保存到一个全局变量中,以便以后使用。”@FlorinPop:重点是错误消息。我在上面添加了一个关于编辑的注释。重点不是错误消息。我正在努力获取错误消息在lineReader函数外调用变量,以便我以后可以对其进行操作。但谢谢!“您使用var声明函数,这将在到达该行时完成。因此,当您在回调中调用它时,该函数尚未定义。”不,这是不正确的,但是你可以理解为什么你会到达那里。只有当readLine
同步调用它的回调时才会出现这种情况,但是它没有。按照问题中的顺序排列东西是不好的做法,但是dataCollector
在调用回调时会有它的值。是的:请参阅函数声明被引入。尽管如此,这里的问题仍然是所指出的阴影。是的,我知道函数声明是如何工作的。我是说你所说的OP代码是不正确的。因为它是不正确的。我也非常清楚地说了为什么它是不正确的。对不起,误读了你的帖子。我同意你的观点:).但正如您所指出的,我的观点是,我认为函数的声明顺序不正确(但我可能错了)。它不理想,但也不正确,而且确实有效;函数是在OP调用它时定义的:(它不适用于数组#sort
使用的同步回调。)OP的实际问题与此完全无关。
function dataCollector(folder_names, data) {
/* Your function */
}