Return array from node.js readline 模块关闭事件
Return array from node.js readline module on close event
我在服务器端调用一个函数,该函数打开一个 csv 文件并在每一行中搜索一个字符串。在关闭事件中,该函数应该 return 一个包含来自 csv 文件(在第一列中)的前 5 个字符串匹配项的数组。但是,似乎该数组在函数外部无法访问(可能是由于异步行为):
index.js
function calling_function()
{
var a_string = "foo";
var array = database_search(a_string);
console.log(array);
}
function database_search(a_string)
{
var result = ["", "", "", "", ""];
var csv_file = readline.createInterface({
input: fs.createReadStream(__dirname + '/Static/a_file.csv')
});
var cntr = 0;
csv_file.on('line', function (line) {
if(line.indexOf(a_string) > -1)
{
if(cntr < 5)
{
result[cntr] = line.split(",")[0];
}
else
{
csv_file.close();
}
cntr++;
}
});
csv_file.on('close', function() {
return result; // not returning result array
});
}
关闭事件时访问读取行外数组的正确方法是什么?
在“csv_file.on”事件中,您处于回调函数的范围内。
为了获得数组,您可以执行以下操作:
function calling_function()
{
var a_string = "foo";
var array = []
database_search(a_string ,arr => {
array = arr
console.log(array);
});
}
function database_search(a_string ,callback)
{
var result = ["", "", "", "", ""];
var csv_file = readline.createInterface({
input: fs.createReadStream(__dirname + '/Static/a_file.csv')
});
var cntr = 0;
csv_file.on('line', function (line) {
if(line.indexOf(a_string) > -1)
{
if(cntr < 5)
{
result[cntr] = line.split(",")[0];
}
else
{
csv_file.close();
}
cntr++;
}
});
// notice i added the 'result' in the callback function parameter
csv_file.on('close', function(result) {
callback(result)
});
}
我在服务器端调用一个函数,该函数打开一个 csv 文件并在每一行中搜索一个字符串。在关闭事件中,该函数应该 return 一个包含来自 csv 文件(在第一列中)的前 5 个字符串匹配项的数组。但是,似乎该数组在函数外部无法访问(可能是由于异步行为):
index.js
function calling_function()
{
var a_string = "foo";
var array = database_search(a_string);
console.log(array);
}
function database_search(a_string)
{
var result = ["", "", "", "", ""];
var csv_file = readline.createInterface({
input: fs.createReadStream(__dirname + '/Static/a_file.csv')
});
var cntr = 0;
csv_file.on('line', function (line) {
if(line.indexOf(a_string) > -1)
{
if(cntr < 5)
{
result[cntr] = line.split(",")[0];
}
else
{
csv_file.close();
}
cntr++;
}
});
csv_file.on('close', function() {
return result; // not returning result array
});
}
关闭事件时访问读取行外数组的正确方法是什么?
在“csv_file.on”事件中,您处于回调函数的范围内。 为了获得数组,您可以执行以下操作:
function calling_function()
{
var a_string = "foo";
var array = []
database_search(a_string ,arr => {
array = arr
console.log(array);
});
}
function database_search(a_string ,callback)
{
var result = ["", "", "", "", ""];
var csv_file = readline.createInterface({
input: fs.createReadStream(__dirname + '/Static/a_file.csv')
});
var cntr = 0;
csv_file.on('line', function (line) {
if(line.indexOf(a_string) > -1)
{
if(cntr < 5)
{
result[cntr] = line.split(",")[0];
}
else
{
csv_file.close();
}
cntr++;
}
});
// notice i added the 'result' in the callback function parameter
csv_file.on('close', function(result) {
callback(result)
});
}