繁体   English   中英

Nodejs readline 回调

[英]Nodejs readline callback

我正在研究回调,但由于某种原因我无法正确理解......我想读取一个文件,并将它的数据保存到一个全局变量中以供以后使用。

这是我到目前为止所拥有的:

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.

怎么了? 我得到: dataCollector is not a function

您在此处隐藏dataCollector标识符:

lineReader.on('line', function(line, dataCollector) {

这将dataCollector声明为回调的第二个参数,隐藏(隐藏)脚本顶层的标识符。

line事件没有记录它为其回调提供了第二个参数,因此它应该如下所示:

lineReader.on('line', function(line) {

重新您对问题的扩展:

 console.log(folder_names[0]); //should have a value now.

不,不应该。 为什么: 如何从异步调用返回响应?

在您的情况下,您可能希望在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
    });

您使用var声明您的函数,这将在到达该行时完成。 因此,当您在回调中调用它时,该函数尚未定义。 为了能够使用它,将它移动到lineReader.on('line', function(){})或(更好)像这样定义它:

function dataCollector(folder_names, data) {
  /* Your function */
}

这样做,你的函数在你的脚本执行之前被声明,因此当你到达你的回调时它存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM