试图将数组添加到firebase,但由于nodejs没有异步特性而出现问题

Trying to add array to firebase but having issue because no async nature of nodejs

本文关键字:异步 问题 nodejs 添加 数组 firebase      更新时间:2023-09-26

我是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);

"诀窍"是将依赖操作放入回调中。因此,与其说"首先获取值,然后添加搜索文本,然后返回JSON响应",不如将其重新定义为"当我们获取值时,添加搜索文本并返回JSON响应。"。

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(),因为我担心你会在那里触发一个无限循环。如果不是这样的话,当然可以随意更改。