试图将数组添加到firebase但因为没有nodejs的异步性质而有问题

时间:2015-12-04 02:23:37

标签: javascript node.js asynchronous express firebase

我是nodejs,angularjs和firebase世界的初学者。我正在尝试将数据加载到firebase中,但由于nodejs的异步性质而存在问题。 我的目的是从firebase搜索现有列表,如果有一些数据,那么将新元素添加到该列表并将其写回firebase。下面是我的代码,但我面临的问题有点奇怪。它工作正常,并继续向数组添加数据,直到我关闭正在运行的节点服务器。一旦我重新启动该节点服务器,由于nodejs的异步性质,它在从firebase获取数组数据之前首先向数组添加新元素。

我的问题是,我们如何限制这种情况发生?我基本上想要获取存储在firebase下的数组,并在firebase上添加一个值。我试图将我们从firebase收到的这些数据作为expressjs API的输出返回。

我们可以将此firebase视为一些WS API,它也可以为我们提供数据和插入数据。

请帮忙。

var ref = new Firebase('FIREBASE URL/'+req.query.id);   
var list = [];      
ref.on('value', function(snap) { list = snap.val();});
list.push(req.query.searchtext);
ref.set(list);

var result = {key: req.query.id, mainList: list};
res.json(result);

1 个答案:

答案 0 :(得分:1)

"技巧"是将依赖操作置于回调中。因此,不要说"首先获取值,然后添加搜索文本,然后返回JSON响应",将其重新构造为"当我们获取值时,添加搜索文本并返回JSON响应& #34;

var ref = new Firebase('FIREBASE URL/'+req.query.id);   
ref.once('value', function(snap) { 
    var list = snap.val();
    list.push(req.query.searchtext);
    ref.set(list);

    var result = {key: req.query.id, mainList: list};
    res.json(result);
});

请注意,我已从on()更改为once(),因为我担心您会在那里触发无限循环。如果情况并非如此,请随时改回来。