我有一个Firebase Cloud Function,它为onWrite
上的用户分配一个号码。以下代码有效,但出了点问题,因为控制台的日志状态为Function returned undefined, expected Promise or value
。
我也不确定如何从onWrite
内部引用根,因此我创建了几个相互引用的“父”条目。我敢肯定有更好的方法。
onWrite对此触发:
/users/{uid}/username
触发器计算/ usernumbers中的子代数,然后在此处写一个条目,其中包含uid和子代数+ 1:
/usernumbers/uoNEKjUDikJlkpLm6n0IPm7x8Zf1 : 5
云功能:
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.setCount = functions.database.ref('/users/{uid}/username').onWrite((change, context) => {
const uid = context.params.uid;
const parent1 = change.after.ref.parent; //uid
const parent2 = parent1.ref.parent; //users
const parent3usernumbers = parent2.ref.parent.child('/usernumbers/');
const parent3usernumbersuid = parent2.ref.parent.child('/usernumbers/'+uid);
parent3usernumbers.once("value")
.then(function(snapshot) {
var a = snapshot.numChildren();
return parent3usernumbersuid.transaction((current) => {
return (a + 1);
}).then(() => {
return console.log('User Number Written', uid, a);
});
});
});
有更好的方法吗?如何获得函数返回的未定义错误以消失?
我还要提到,写入“ usernumber”条目需要花费几秒钟的时间。我猜它正在等待函数返回一些东西。
答案 0 :(得分:2)
您的函数必须返回一个Promise:
exports.setCount = functions.database.ref('/users/{uid}/username').onWrite((change, context) => {
const uid = context.params.uid;
const parent1 = change.after.ref.parent; //uid
const parent2 = parent1.ref.parent; //users
const parent3usernumbers = parent2.ref.parent.child('/usernumbers/');
const parent3usernumbersuid = parent2.ref.parent.child('/usernumbers/'+uid);
return new Promise((resolve, reject) => {
parent3usernumbers.once("value").then(function(snapshot) {
var a = snapshot.numChildren();
return parent3usernumbersuid.transaction((current) => {
return (a + 1);
}).then(() => {
console.log('User Number Written', uid, a);
resolve({uid : uid, a : a})
}).catch(function(e) {
reject(e)
})
});
});
});