问题描述
我使用以下代码,但代码未到达if语句
function getContent(key) {
    var filePath = path.join(__dirname, '../test.txt');
    fs.readFile(filePath, 'utf8', function (err, data) {
        if (err) {
            return console.log(err);
        }
        ....
        var fileKeyValObj = {};
        return fileKeyValObj[key];
    });
}
我能够通过调试及其工作正常访问上一方法的返回... 在这里,该功能没有达到if
getContent('web', function (cmd) {
    if (typeof cmd !== 'undefined') {
这里的关键是我发送的网站,我看到getContent的返回值正确。
我看到了这篇文章,但我认为我也做了同样的事情,我在这里错过了吗?
顺便说一句,在这种情况下,建议使用promise ??? 像蓝鸟
1楼 
  
    heartyporridge 
    0 
    2015-07-30 18:27:01
  
 
  
     问题是fs.readfile的回调中的return值不是其包含函数getContent的有效返回值。 
 
     当您将回调传递给fs.readFile ,传递的函数将在fs.readFile完成时 排队运行。 
     简而言之, getContent进行排队,然后说“我的工作完成了!” 
     并返回(void),但是fs.readfile在运行回调之前正在等待其自身完成。 
 
     当fs.readfile运行其回调时,它不在 getContent 的上下文中。 
     它会返回,但是“没人在那儿”获取返回值。 
 
     相反,您可以做的是将回调传递给getContent ,然后将其传递给fs.readFile 。 
function getContent(key, callback) {
    var filePath = path.join(__dirname, '../test.txt');
    fs.readFile(filePath, 'utf8', callback);
}
getContent('web', function (error, data) {
    if (!error) {
        ... //Put your code here!
    } else {
        console.log(error);
    }  
});
 
     现在,当fs.readFile完成时, getContent将运行其第二个参数function (error, data) 。