首先,我要说火力基地团队是最好的。
//Firebase Cloud Functions
const functions = require('firebase-functions');
// Firebase Admin SDK
const admin = require('firebase-admin');
admin.initializeApp(); //initialize the admin sdk
//UUID
const uuidv1 = require('uuid/v1');
exports.setupProfile= functions.auth.user().onCreate((user) => {
const email = user.email; // The email of the user.
const displayName = user.displayName; // The display name of the us
const pid = uuidv1(); // public id
//****************
//create a set of items visible to others
return admin.database().ref('/users-public/' + pid).push({"displayName": displayName,"profile-pic-path":""});
//user's private information
return admin.database().ref('/users-private/' + user.uid).push({"displayName": displayName, "pid": pid,"email":email,"dob": "","address": "","age": "","zip-code":""});
//****************
});
我正在研究一种逻辑,以在用户首次注册时创建用户配置文件脚手架/默认设置。
身份验证触发器与所有其他背景功能一样,是异步的,这意味着如果人A和人B同时注册,并且上面的功能被同时触发,则人A和人B都不必等待对方的“ setupProfile”功能完成。本质上是两个不同的线程。
如果需要清理,请告诉我。 -LK
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp(); //initialize the admi sdk
exports.setupProfile = functions.auth.user().onCreate((user, context) => {
return Promise.all([
admin.database().ref("/users-public/" + user.uid).set({ "displayName": ""}),
admin.database().ref('/users-private/' + user.uid).set({ "displayName": "", "email": user.email, "phone": "", "dob": "", "address": "", "age": "", "zip-code": ""})
]).then((results)=> {
console.log("New user: " + user.uid);
});
});
答案 0 :(得分:0)
您的代码(如图所示)将无法按预期运行,因为第一次返回将阻止第二次返回执行。
如果有两项不需要按顺序执行的异步工作,则应该将所有的Promise收集到一个数组中,并在该数组上使用Promise.all()
。
需要澄清的另一件事-Cloud Functions不处理JavaScript中的线程概念。每个功能仅执行异步工作,每个功能调用都在其自己的服务器实例中运行,与所有其他功能调用隔离。您可能需要watch my video对此进行详细说明。