在 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)
.
再次读取它
有没有人对这个问题有进一步的见解?
我正在尝试在写入完成后更新一个值(在 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)
.
有没有人对这个问题有进一步的见解?