如何从函数获取数据到变量[重复]
Posted
技术标签:
【中文标题】如何从函数获取数据到变量[重复]【英文标题】: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 会返回“未定义”。我怎样才能把这些数据放到变量列表中?
【问题讨论】:
使用 Bluebird 协程函数并使用它可以产生 Promise ***.com/questions/5010288/… 您不能期望同步获得异步结果。您必须异步获取它(回调、承诺)。 【参考方案1】:简短的回答:你不能。
因为loadOrInitializeTaskArray
中的加载是异步的,所以所有魔法都必须在您传递的回调中发生。您不能只从中“返回”一个值。
选项 1: 将所有依赖于加载数据的逻辑放在作为回调传递的匿名函数中。
var list = loadOrInitializeTaskArray(file, function(tasks)
console.log(tasks);
);
选项 2: 使用 Promises。它们基本上像回调一样工作,但稍微灵活一些,并且使链接更容易。
【讨论】:
以上是关于如何从函数获取数据到变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章