【问题标题】:How to get data from function to variable [duplicate]如何从函数获取数据到变量[重复]
【发布时间】:2017-09-03 16:42:03
【问题描述】:

我正在学习 node.js,但遇到了问题。如何从函数中获取数据到变量?

function loadOrInitializeTaskArray(file, cb) {
        fs.exists(file, function(exists) {
                var tasks = [];
                if (exists) {
                    fs.readFile(file, 'utf8', function(err, data) {
                            if (err) throw err;
                            var data = data.toString();
                            var tasks = JSON.parse(data || '[]');
                            cb(tasks);
                    })
                } else {
                        cb([]);
                }
        })
}



function listTasks(file) {
        loadOrInitializeTaskArray(file, function(tasks) {
                for (var i in tasks) {
                        console.log(tasks[i]);
                }
        })
}

函数 listTasks 工作正常,但我想创建自己的函数,例如 customListTasks:

function customListTasks(file) {
        var list = loadOrInitializeTaskArray(file, function(){});
        console.log(list);
}

这不会返回错误,但列表中的 console.log 会返回“未定义”。我怎样才能把这些数据放到变量列表中?

【问题讨论】:

标签: javascript node.js


【解决方案1】:

简短的回答:你不能。

因为loadOrInitializeTaskArray 中的加载是异步的,所以所有魔法都必须在您传递的回调中发生。您不能只从中“返回”一个值。

选项 1: 将所有依赖于加载数据的逻辑放在作为回调传递的匿名函数中。

var list = loadOrInitializeTaskArray(file, function(tasks){
    console.log(tasks);
});

选项 2: 使用 Promises。它们基本上像回调一样工作,但稍微灵活一些,并且使链接更容易。

【讨论】:

    猜你喜欢
    • 2013-09-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2021-05-02
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多