我正在学习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”。如何将此数据转换为变量列表?
答案 0 :(得分:0)
简短回答:你不能。
因为loadOrInitializeTaskArray
中的加载是异步的,所有魔法必须在你传递的回调中发生。你不能只是回归'来自它的价值。
选项1:将所有依赖于已加载数据的逻辑放在您作为回调传递的匿名函数中。
var list = loadOrInitializeTaskArray(file, function(tasks){
console.log(tasks);
});
选项2:使用Promises。它们的工作方式基本上就像回调,但稍微灵活一些,使链接更容易。