节点kriskowal / q承诺链接承诺上的堆栈错误

下面的代码错误出在第一个.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:

 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){...}); 

为什么我不能以这种方式链接命名函数?

你的validateSettings调用应该是这样的:

 parseConfigurationFile(path.join(__dirname,'file.config')) .then(validateSettings); 

原因是validateSettings需要作为一个函数被引用,然后.then将用正确的参数调用该函数。 这样做,你会收到一个参考错误,因为在函数调用绑定时,parsedData不可用。