在 Cloud Function 中完成写入后更新值

Update value once write completes in Cloud Function

我正在尝试在写入完成后更新一个值(在 Cloud Function 中),但它就是行不通(我确信这是一个非常简单的问题)。代码如下:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const firebase = require('firebase');

 admin.initializeApp(functions.config().firebase);
 exports.createMessage = functions.https.onRequest((request, response) => {
        const json = JSON.parse(request.query.json); // == "{'start':0, 'end':0}"
        json.start = firebase.database.ServerValue.TIMESTAMP;
        admin.database().ref('/messages/').push(json).then(snapshot => {

            //Here is the problem. Whatever I try here it won't work to retrieve the value.
            //So, how to I get the "start" value, which has been written to the DB (TIMESTAMP value)?
            var startValue = snapshot.ref.child('start').val();

            snapshot.ref.update({ end: (startValue + 85800000) }).then(snapshot2=>{
                response.redirect(303, snapshot.ref);
            });
        });
 });

是我使用 admin.database() 的问题吗?

此代码:

var startValue = snapshot.ref.child('start').val();

实际上没有检索到任何值。查看 DataSnapshot. Reach into that snapshot directly with child() 的文档 - 您不需要 ref。也许这就是你的意思?

var startValue = snapshot.child('start').val();

我不确定 Firebase 中是否存在错误,或者我是否使用错误,但如果我尝试调用 snapshot-reference 上的任何方法,我只会收到一条错误消息: TypeError: snapshot.xxx is not a function 其中 xxx 是我尝试使用的函数名称(例如:child(...)、forEach(...) 等)。

但是,以下似乎解决了 snapshot 的问题:

admin.database().ref('/messages/').push(json).once('value').then(snapshot => {

而不是:

admin.database().ref('/messages/').push(json).then(snapshot => {

我的 有根据的猜测是 then-promise,对于 push-函数 returns 一些错误 snapshot 因为似乎唯一有效的是 snapshot.key

此外,如果我没记错的话,我的解决方案现在不是进行两次读取,而不是一次读取吗?由于 push 将写入然后(据说)读取和 return 写入的值然后我用 once(value).

再次读取它

有没有人对这个问题有进一步的见解?