如何导出变量(如下面的“数据”),因此我可以将下面的函数用作模块:
//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:undefined不是函数”。如何使回调工作?
答案 0 :(得分:0)
在最后一个片段中调用回调之前定义回调。其他一切看起来都应该有效。
你有:
var fooreader = require('fooreader.js');
fooreader(callback);
var callback = function(data){
console.log(data);
}
当您运行fooreader(callback)
时,它已定义callback
之前。切换命令的顺序,一切都应该有效。
答案 1 :(得分:0)
如果我使用匿名函数来处理回调,它会起作用。这有意义,因为它将函数传递回模块......
//consumer.js
var fooreader = require('fooreader.js');
fooreader(function (data){
console.log(data);
});