【发布时间】:2013-05-28 23:14:26
【问题描述】:
第一个 .then 出现以下代码错误:
/Users/danielbyrne/working/mite_npm/mite.js:48
.then(configMan.validateSettings(parsedData))
ReferenceError: parsedData is not defined
我不明白为什么这段代码会失败。 来电:
parseConfigurationFile(path.join(__dirname,'file.config'))
.then(validateSettings(parsedData));
它调用的函数:
function parseConfigurationFile(fileName) {
var readFile = q.nfbind(fs.readFile);
readFile(fileName,"utf-8")
.then(function(data) {
var deferred = q.defer();
// Return the Config 'settings' in JSON
deferred.resolve(JSON.parse(data));
return deferred.promise;
});
}
function vaidateSettings (data) {...}
唯一可行的方法是,如果我将函数 validateSettings 更改为匿名函数并将其像这样内联:
parseConfigurationFile(path.join(__dirname,'file.config'))
.then(function(parsedData){...});
为什么我不能以这种方式链接命名函数?
【问题讨论】:
-
你有完整的堆栈跟踪吗?这绝对是
data是您代码中某处的变量,我的,或者可能是其他人的变量,但在该范围内不存在。我检查了 Q 并且该库中没有对data的引用。 -
我很抱歉。引用的“parsedData”位于示例的第 2 行。
-
我尝试了几种不同的方式重构这段代码。基本上第二个 .then 总是抛出这个错误,除非它是一个匿名函数。我确定这只是因为我不知道自己在做什么。
-
从 parseConfigurationFile() 返回的值对第二个函数调用 validateSettings() 不可用,除非我将其设为匿名函数。这是为什么呢?