1

以下代码在第一个 .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){...});

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

4

1 回答 1

1

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

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

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

于 2013-05-28T15:14:26.297 回答