Javascript NodeJS使用module.exports导出异步变量
我在nodejs应用程序中有2个文件: export.js(逐行读取文件并将其保存到数组中) 和app.js(应该得到导出的值,这样我就可以在这里玩了) 正如您在export.js中看到的,我使用了一个异步回调,因此它将保存数据,但我认为我需要在app.js文件中使用另一个异步回调。实现这一目标的最佳方式是什么 另外,我意识到对export.js文件的异步调用是不必要的。以下是新版本:Javascript NodeJS使用module.exports导出异步变量,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我在nodejs应用程序中有2个文件: export.js(逐行读取文件并将其保存到数组中) 和app.js(应该得到导出的值,这样我就可以在这里玩了) 正如您在export.js中看到的,我使用了一个异步回调,因此它将保存数据,但我认为我需要在app.js文件中使用另一个异步回调。实现这一目标的最佳方式是什么 另外,我意识到对export.js文件的异步调用是不必要的。以下是新版本: var lineReader = require('readline').createInterface({
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文件中a变量的值?您可以导出函数
lineReader
,并将onFinish
设置为回调函数,其中console.log
可以写入您可以导出函数lineReader
,并将onFinish
设置为回调函数,其中console.log
可以写入
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) })
然后
var a = require("./export");
a(function(data){ console.log(data) })
您还可以导出承诺,而不是回调:
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
})
要获得承诺,您可以使用
npm i bluebird
安装bluebird,而不是回调,您还可以导出承诺:
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
})
为了得到承诺,您可以使用
npm i bluebird
安装bluebird,这可能有点太实际了,但为什么不同步阅读test.txt
,将内容拆分成行,然后导出这些内容呢?是的,这也应该有效。:)也许有点太实际了,但为什么不同步读取test.txt
,将内容拆分成行,然后导出这些行呢?是的,这也应该有效。:)非常感谢。你能为其他读者添加一些解释吗?:)我不知道怎么解释,很简单。只导出带有回调参数的函数。@Maxx这里您当然可以解释一些事情,例如,为什么尝试同步导出异步函数的结果会出现问题,以及导出带有回调的函数如何解决这些问题。谢谢。你能为其他读者添加一些解释吗?:)我不知道怎么解释,很简单。只导出带有回调参数的函数。@Maxx在这里您当然可以解释一些事情,例如,为什么尝试同步导出异步函数的结果会出现问题,以及导出带有回调的函数如何解决这些问题。