我在nodejs app中有2个文件:
export.js (逐行读取文件并将其保存到数组中)
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('test.txt')
});
var file_lines = [];
onFinish(function(result) {
module.exports = result;
});
function onFinish(callback){
lineReader.on('line', function (line) {
file_lines.push(line);
}).on('close', function() {
callback(file_lines);
})
};
和 app.js (应该获取导出的值,以便我可以在这里玩)
var a = require("./export");
console.log(a);
正如您在 export.js 中看到的,我使用了异步回调,因此它会保存数据,但我想我需要在应用中进行另一次异步回调。 js 文件。实现这一目标的最佳方法是什么?
P.S。我意识到不需要对 export.js 文件进行异步调用。这是新版本:
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('test.txt')
});
var file_lines = [];
lineReader.on('line', function (line) {
file_lines.push(line);
}).on('close', function() {
module.exports = file_lines;
console.log(file_lines);
})
但同样,我的问题是,如何在 app.js 文件中的变量中获取值?
答案 0 :(得分:3)
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('test.txt')
});
var file_lines = [];
module.exports = function onFinish(callback){
lineReader.on('line', function (line) {
file_lines.push(line);
}).on('close', function() {
callback(file_lines);
})
};
然后
var a = require("./export");
a(function(data){ console.log(data) })
答案 1 :(得分:2)
您还可以导出承诺:
,而不是回调var Promise = require('bluebird')
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('test.txt')
});
module.exports = function (user) {
return new Promise(function (resolve, reject) {
var file_lines = [];
lineReader.on('line', function (line) {
file_lines.push(line);
}).on('close', function() {
resolve(file_lines);
})
})
}
然后很好地使用它,就像这样:
read_lines = require('line_reader')
read_lines()
.then(function (lines) {
// lines are already read here
})
获取Promise,您可以使用npm i bluebird
答案 2 :(得分:0)
您可以导出函数lineReader
并将onFinish
设置为console.log
可以写入的回调函数