【发布时间】:2013-06-07 14:33:49
【问题描述】:
在下一个示例中,我无法访问函数“fetcher”、“parser”和“saveToDb”中的变量“locals”。
var parser = require('parser.js');
var fetcher = require('fetcher.js');
var saveToDb = require('models/model.js');
var async = require('async');
function task() {
var locals = [] //<-- declared here
async.series([
fetcher, //<-- can not access "locals"
parser, //<-- can not access "locals"
saveToDb //<-- can not access "locals"
],
function (err) {
if (err) return callback(err);
callback(null);
});
}
在下一个示例中,“本地”是可访问的。我只是从请求的模块中复制了函数声明,并将它们直接粘贴到“async.series”中。
var async = require('async');
function task() {
var locals = [] //<-- declared here
async.series([
function(callback) {// <-- can access "locals"},
function(callback) {// <-- can access "locals"},
function(callback) {// <-- can access "locals"}
],
function (err) {
if (err) return callback(err);
callback(null);
});
}
虽然这可行 - 我确实想保持我的代码模块化。 我该如何解决? 或者 - 我在这里忘记了 JavaScript 的基础知识 ?
谢谢。
【问题讨论】:
-
可以说您忘记了一件事:如果代码可以访问或多或少的随机变量(在本例中为@ 987654323@ 变量)在别处定义。使某些东西模块化通常不仅仅需要在文件周围传播东西,它还需要明确代码不同部分之间的关系,例如通过将函数需要的所有数据作为参数传递。
标签: javascript node.js scope async.js