注册新帐户时出现此错误。我使用的代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.afterRegFunction = functions.auth.user().onCreate((user) => {
var randInt = (Math.floor(Math.random() * 8) + 1);
var userObject = {
u_n : user.uid, // user nickname
u_n_c : admin.database.ServerValue.TIMESTAMP, // next date to change nick
u_a : randInt.toString(), // user avatar
u_a_c : admin.database.ServerValue.TIMESTAMP, // next date to change avatar
d : admin.database.ServerValue.TIMESTAMP, // date the account was created
u_p : 0 // user points
};
admin.database().ref('userInfo/' + user.uid).set(userObject);
admin.database().ref('nicknames/' + user.uid).set(user.uid);
});
我在日志中状态为“错误”的功能已完成,并且数据库中未添加任何内容。
答案 0 :(得分:2)
您将忽略set()返回的promise,后者是异步的。使用Cloud Functions后台类型函数,您必须返回仅在所有异步工作完成后才能解决的Promise。由于您有两项工作,因此需要一个新的Promise,当这两项都得到解决时,它就会解决。
首先,您应该阅读有关终止函数的文档,以及watch the video series有关如何处理Cloud Functions中的promise的文档,以便您了解需要做什么。
然后,您将意识到需要执行以下操作:
const p1 = admin.database().ref('userInfo/' + user.uid).set(userObject);
const p2 = admin.database().ref('nicknames/' + user.uid).set(user.uid);
return Promise.all([p1, p2]);
同样使用Cloud Functions,您应该像这样不使用参数来初始化Admin SDK:
admin.initializeApp();
现在不建议您这样做。