Node.js 节点异步。模块间变量的瀑布式传递
我在使用async.瀑布时在模块之间传递变量时遇到问题。这是我的主要跑步者Node.js 节点异步。模块间变量的瀑布式传递,node.js,asynchronous,module,Node.js,Asynchronous,Module,我在使用async.瀑布时在模块之间传递变量时遇到问题。这是我的主要跑步者 var async = require('async'); var helpers = require('./1-helpers'); var file = process.argv[2]; var body = ''; async.waterfall([helpers.getURL, helpers.openURL, helpers.printBody]); 和函数都在这个文件中 var fs = require
var async = require('async');
var helpers = require('./1-helpers');
var file = process.argv[2];
var body = '';
async.waterfall([helpers.getURL, helpers.openURL, helpers.printBody]);
和函数都在这个文件中
var fs = require('fs');
var http = require('http');
module.exports = {
getURL: function (done) {
fs.readFile(file, 'utf8', this.gotFileData);
},
gotFileData: function (err, url) {
if (err) return done(err);
done(null, url);
},
openURL: function (url, done) {
http.get(url, this.handleResponse).on('error', function (e) {
done(e);
});
},
handleResponse: function (res) {
res.on('data', this.readChunk);
res.on('end', function gotBody (chunk) {
done(null, body);
});
},
readChunk: function (chunk) {
body += chunk.toString();
},
printBody: function (err, body) {
if (err) return console.error(err);
console.log(body);
}
}
这就是我得到的错误:
/Users/wimo/dev/nodejs/async-you/1-helpers.js:7
fs.readFile(file, 'utf8', this.gotFileData);
^
ReferenceError: file is not defined
at getURL (/Users/wimo/dev/nodejs/async-you/1-helpers.js:7:17)
at nextTask (/Users/wimo/dev/nodejs/async-you/node_modules/async/dist/async.js:5021:18)
at Object.waterfall (/Users/wimo/dev/nodejs/async-you/node_modules/async/dist/async.js:5024:9)
at Object.<anonymous> (/Users/wimo/dev/nodejs/async-you/1.js:7:7)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
/Users/wimo/dev/nodejs/async you/1-helpers.js:7
fs.readFile(文件'utf8',this.gotFileData);
^
ReferenceError:未定义文件
在getURL(/Users/wimo/dev/nodejs/async you/1-helpers.js:7:17)
在下一个任务(/Users/wimo/dev/nodejs/async you/node_modules/async/dist/async.js:5021:18)
在Object.falter(/Users/wimo/dev/nodejs/async you/node_modules/async/dist/async.js:5024:9)
反对。(/Users/wimo/dev/nodejs/async you/1.js:7:7)
在模块处编译(Module.js:556:32)
在Object.Module._extensions..js(Module.js:565:10)
在Module.load(Module.js:473:32)
在TryModule加载时(module.js:432:12)
在Function.Module.\u加载(Module.js:424:3)
位于Module.runMain(Module.js:590:10)
关于通过async.瀑布函数传递'file'和'body'变量,有什么提示吗
非常感谢,,
main.js中的Wim
传递async.瀑布中的第一个函数async.constant这将把变量文件作为参数传递给getURL函数。参考和
在helper.js中
var fs = require('fs');
var http = require('http');
module.exports = {
getURL: function (file, callback) {
fs.readFile(file, 'utf8', function (err, fileData) {
if (err) {
callback(err);
return;
}
callback(null, fileData);
});
},
openURL: function (url, callback) {
http.get(url, function (err, httpResponse) {
if (err) {
callback(err);
return;
}
callback(null, httpResponse);
});
},
printBody: function (httpResponse, callback) {
httpResponse.on('data', function (chunk) {
console.log(chunk);
callback(null, 'done');
});
}
}
js使用回调来确定是否发生了错误,回调的参数将传递给下一个任务。
在这里,fs.readile函数的结果fileData被传递给getURL(下一个任务)。因此,url获取fileData的值 在main.js中
传递async.瀑布中的第一个函数async.constant这将把变量文件作为参数传递给getURL函数。参考和
在helper.js中
var fs = require('fs');
var http = require('http');
module.exports = {
getURL: function (file, callback) {
fs.readFile(file, 'utf8', function (err, fileData) {
if (err) {
callback(err);
return;
}
callback(null, fileData);
});
},
openURL: function (url, callback) {
http.get(url, function (err, httpResponse) {
if (err) {
callback(err);
return;
}
callback(null, httpResponse);
});
},
printBody: function (httpResponse, callback) {
httpResponse.on('data', function (chunk) {
console.log(chunk);
callback(null, 'done');
});
}
}
js使用回调来确定是否发生了错误,回调的参数将传递给下一个任务。
在这里,fs.readile函数的结果fileData被传递给getURL(下一个任务)。因此,url获取fileData的值 太好了,谢谢你,希曼尼!我改用async.apply,它可以很好地传递“file”变量。太好了,谢谢Himani!我改用async.apply,它可以很好地传递“file”var。