如何导出变量(如下面的“数据”),以便我可以将下面的函数用作模块:
//fooreader.js
var fs = require("fs");
var fileName = "foo.txt";
fs.exists(fileName, function(exists) {
if (exists) {
fs.stat(fileName, function(error, stats) {
fs.open(fileName, "r", function(error, fd) {
var buffer = new Buffer(stats.size);
fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
var data = buffer.toString("utf8", 0, buffer.length);
console.log(data);
fs.close(fd);
});});});}});
我想像模块一样使用它:
//consumer.js
var fooreader = require('fooreader.js');
console.log(fooreader());
我知道,考虑到异步读取,这可能有点天真,所以我尝试将“fooreader”放入接受回调的函数中:
//fooreader.js
var fs = require("fs");
var fileName = "foo.txt";
var fooreader = function(callback){
fs.exists(fileName, function(exists) {
if (exists) {
fs.stat(fileName, function(error, stats) {
fs.open(fileName, "r", function(error, fd) {
var buffer = new Buffer(stats.size);
fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
var data = buffer.toString("utf8", 0, buffer.length);
console.log(data);
fs.close(fd);
callback(data);
});});});}});};
module.exports = fooreader;
并尝试过:
//consumer.js
var fooreader = require('fooreader.js');
fooreader(callback);
var callback = function(data){
console.log(data);
}
并得到“TypeError:未定义不是一个函数”。如何使回调起作用?
最佳答案
如果我使用匿名函数来处理回调,它就会起作用。有意义,因为它将函数传递回模块......
//consumer.js
var fooreader = require('fooreader.js');
fooreader(function (data){
console.log(data);
});
关于node.js:导出嵌套匿名异步函数中包含的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077424/