Firebase Cloud Functions - 如何调用另一个函数并返回对象
Firebase Cloud Functions - 如何调用另一个函数并返回对象
我从我的Angular组件中创建了一个可调用函数。我的Angular组件调用了createUser
函数,并成功返回了userRecord
的值。
然而,我想做的是在createUser
成功后调用另一个名为createUserRecord
的云函数。对于这个特定的情况,我对promise不是特别熟悉,以及在哪里需要返回什么。
下面是我的两个云函数。在createUser
成功后,我该如何调用createUserRecord
?
export const createUser = functions.https.onCall(async (data, context) => { console.log('data = ', data); return admin.auth().createUser({ email: data.email, password: data.password, }).then(function (userRecord) { return userRecord }) .catch(function (error) { return error; console.log('Error creating new user:', error); }); }); export const createUserRecord = functions.auth.user().onCreate((user, context) => { const userRef = db.doc(`users/${user.uid}`); return userRef.set({ email: user.displayName, createdAt: context.timestamp, nickname: 'bubba', }) });
更新
这是我合并了两个函数的版本。这确实产生了预期的结果,即创建一个账户,然后写入到firestore。然而,由于它没有向客户端返回一个值,所以感觉有点“不对劲”。
export const createUser = functions.https.onCall(async (data, context) => { console.log('data = ', data); return admin.auth().createUser({ email: data.email, password: data.password, }).then(function (userRecord) { const userRef = db.doc(`users/${userRecord.uid}`); return userRef.set({ email: data.email, name: data.name, }) }) .catch(function (error) { return error; console.log('Error creating new user:', error); }); });
Angular可调用函数
sanitizedMessage
的控制台日志将返回undefined。
addUser() { const createUser = firebase.functions().httpsCallable('createUser'); const uniquePassword = this.afs.createId(); createUser({ email: this.userForm.value.email, password: uniquePassword, name: this.userForm.value.name, }).then((result) => { // 读取云函数的结果。 var sanitizedMessage = result.data.text; console.log('sanitizedMessage = ', sanitizedMessage); }).catch((error) => { var code = error.code; var message = error.message; var details = error.details; console.log('error = ', error); }); }