调用async函数不能用作exptecd

时间:2015-07-30 18:10:01

标签: javascript asynchronous callback promise bluebird

我使用以下代码,代码没有进入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的返回值正确。

我看到这篇文章,但我认为我做了同样的事情,我在这里想念一下吗? How do I return the response from an asynchronous call?

在这种情况下,建议使用承诺??? ,如蓝鸟

1 个答案:

答案 0 :(得分:0)

问题在于return回调中的fs.readfile值不是其包含函数getContent的有效返回值。

当您将回调传递给fs.readFile时,您传入的功能排队以在 fs.readFile完成时运行。简单来说,getContent进行排队,然后说'#34;我的工作已经完成了!"并返回(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);
    }  
});

现在,getContent将在function (error, data)完成后运行其第二个参数fs.readFile