【发布时间】:2019-07-26 07:46:48
【问题描述】:
声明
首先,我只想说 firebase 团队是最好的。
代码
//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'函数来完成。本质上是两个不同的线程。
问题
- 星号之间的线是否必须在 async() 方法中 整个过程是真正异步的,还是意味着将其放在 async() 中实际上会从触发的线程中产生另一个线程?
- 我是否应该不关心 async(),因为我应该将每个触发器视为其自己的线程,因此该触发器中的任何任务都将成为该单个线程(初始触发器)的一部分,并且生成另一个线程没有额外的好处。我应该简单地返回一个承诺并收工。
如果我需要解决问题,请告诉我。 -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);
});
});
【问题讨论】:
标签: firebase firebase-realtime-database firebase-authentication google-cloud-functions