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

时间:2013-05-27 21:37:30

标签: node.js 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 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){...});

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

1 个答案:

答案 0 :(得分:1)

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

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

原因是validateSettings需要作为函数引用,而.then将使用正确的参数调用该函数。按照您的方式执行操作,您会收到引用错误,因为在绑定函数调用时parsedData不可用。