我有一堆数据需要在我的实时数据库中更新,但set
命令(as described here in the docs)不起作用。这是我的代码,我与babel-node scriptName.js
一起运行:
var config = {
//CONFIG
};
Firebase.initializeApp(config);
var dbRef = Firebase.database().ref();
getAllFirebaseDocs(dbRef);
async function getAllFirebaseDocs(dbRef, newSet) {
var snapshot = await dbRef.once('value');
var data = snapshot.val();
var bookName = "FirebaseForDummies";
var newData = {
'prop1': 'string',
'prop2': 0
}
Firebase.database().ref(bookName + "/edition/"+ 3).set(newData);
}
我正在做一些其他不影响写入的事情(因此读取所有现有数据)。我特意更新/扩充现有数据,例如;这本书FirebaseForDummies
已有3个版本。这意味着数据库中的editions
值看起来像这样:
0: {data}
1: {data}
2: {data}
我想添加第四个,所以我使用FirebaseForDummmies/edition/3
创建数据库引用。然后就像在文档中一样,我使用set
并将newData
对象传递给它。然而,这无声地失败;我没有收到任何错误消息,实时数据库控制台也没有任何变化。
编辑:
我在我的控制台的babel-node
会话中尝试了这些命令,但它们都有效。所以我的脚本中有一些东西让set()
函数不起作用......不确定它是什么,因为我有其他脚本在现有数据上实现set()
他们都很好。
EDIT2: 我添加了一个回调如下:
Firebase.database().ref(bookName + "/edition/"+ 3).set(newData, function(error) {
if(error) {
console.log(error);
}
else {
console.log("written!");
}
});
同样,当我在babel-node
控制台中尝试它时,它工作正常(返回'写!')但在我的脚本中,我没有得到错误或成功的console.log。
答案 0 :(得分:0)
答案是不要在脚本结尾处执行process.exit()
。我甚至没有想到它,因为我把它放在那里只是为了关闭脚本完成后,但显然它是'切断'#39;请求。我想我应该await
使用set
请求,以便这一切都可以同步发生。