【发布时间】:2020-03-09 08:39:56
【问题描述】:
我有一个我开发的安卓应用程序,它允许用户注册。我写了一个firebase云函数,在创建用户时触发,为刚刚注册的用户生成一个5位随机整数值,并将生成的代码存储在firebase实时数据库中,结构如下。
MainProject
|
|-Codes
|-UniqueUID_1
|-code:72834
|-UniqueUID_2
|-code:23784
我为确保代码生成在后端而部署的功能如下所示。有一个值“checker”被初始化为 0。我使用这个值来确定何时退出 while 循环。基本上我希望该函数生成一个 5 位数的随机值,然后检查实时数据库是否该生成的值存在于“代码”下的所有条目中,如果它不存在,则将其附加到相关 UID 下的代码中。如果存在,checker 保持为零,循环继续。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var checker = 0;
exports.createUserCode = functions.auth.user().onCreate(event => {
while (checker == 0){
var newRand = getUserCode(89999,10000);
var userObject = {
uCode : newRand
};
//run a db query to strategically check value generated
return admin.database().ref("Codes/").orderByChild("uCode").equalTo(newRand).once("value",snapshot => {
if (!snapshot.exists()){
checker = 1;
//add uCode into respective uid slot under Codes
console.log(""+newRand+" : "+event.uid);
return admin.database().ref('Codes/' + event.uid).set(userObject);
}else{
checker = 0;
console.log("uCode "+newRand+" exists");
console.log("uCode generation failed for: "+event.uid);
}
});
}
});
function getUserCode(size, add){
return Math.floor(Math.random()*size+add);
}
我测试了它,它运行良好。我以为问题解决了。然而,在第 7 到第 11 次试验中,它给了我一个 Function returned undefined, expected Promise or value 错误。过了一会儿我又试了一次,它生成的代码很好。其他人对其进行了测试,并带来了同样的错误。
如何解决此问题以确保它始终有效?提前致谢。
【问题讨论】:
-
我最好的猜测是 else 分支中缺少 return 语句,以防快照存在
-
@Michiel 我会测试一下,看看会发生什么。我担心循环是问题的原因,我认为当有多个调用时全局变量没有任何影响
标签: javascript firebase firebase-realtime-database firebase-authentication google-cloud-functions