如何从函数到变量获取数据

时间:2017-04-08 10:03:46

标签: javascript node.js

我正在学习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);
}

这不会给我带来错误,但是list.log在列表中返回“undefined”。如何将此数据转换为变量列表?

1 个答案:

答案 0 :(得分:0)

简短回答:你不能。

因为loadOrInitializeTaskArray中的加载是异步的,所有魔法必须在你传递的回调中发生。你不能只是回归'来自它的价值。

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

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

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