Firebase实时数据库:写入新数据失败

时间:2017-01-13 04:57:01

标签: javascript firebase firebase-realtime-database

我有一堆数据需要在我的实时数据库中更新,但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。

1 个答案:

答案 0 :(得分:0)

答案是不要在脚本结尾处执行process.exit()。我甚至没有想到它,因为我把它放在那里只是为了关闭脚本完成后,但显然它是'切断'#39;请求。我想我应该await使用set请求,以便这一切都可以同步发生。