当前位置: 代码迷 >> JavaScript >> 调用异步功能无法正常工作
  详细解决方案

调用异步功能无法正常工作

热度:5   发布时间:2023-06-05 11:49:52.0

我使用以下代码,但代码未到达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 ??? 像蓝鸟

问题是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)

  相关解决方案