如何在异步 google 云函数中调用第二个函数
How to call a second function within async google cloud function
我正在尝试使用 firebase admin SDK 添加具有特定角色的用户。我可以在对新添加的用户进行身份验证的地方使用它,但我还需要在我的 firestore 数据库中创建一个 users/id 记录。
这是我的代码:
exports.createUser = functions.https.onCall(async (data, context) => {
const user = await admin.auth().createUser({
email: data.email,
emailVerified: true,
password: data.password,
displayName: data.displayName,
disabled: false,
});
await admin.firestore().collection('users').doc(user.uid).set({
displayName: user.displayName,
id: user.uid,
email: user.email,
role: 'clientAccess',
created: fb.firestore.FieldValue.serverTimestamp()
})
return { response: user }
});
我可以将 return admin.firestore().col... 部分放在哪里才能使这项工作正常进行?
谢谢!
我要建议你问的问题不对。您手头的任务是:
- 创建用户帐户
- 将包含该用户相关信息的文档添加到 Firestore
- 将用户对象发送回调用客户端。
对于任务 2,您根本不需要 return
。对于步骤 3,您只需要一个 return。您可以简单地在 async/await 的每个函数上使用 async/await =28=] 承诺在函数 return 将最终结果发送给客户之前确保它们都以正确的顺序执行和完成。
const user = await admin.auth().createUser({ ... });
await admin.firestore().collection('users').doc(user.uid).set({ ... })
return { response: user }
除非您有一些特殊的错误处理,否则您可能也不必担心 try/catch。
我正在尝试使用 firebase admin SDK 添加具有特定角色的用户。我可以在对新添加的用户进行身份验证的地方使用它,但我还需要在我的 firestore 数据库中创建一个 users/id 记录。
这是我的代码:
exports.createUser = functions.https.onCall(async (data, context) => {
const user = await admin.auth().createUser({
email: data.email,
emailVerified: true,
password: data.password,
displayName: data.displayName,
disabled: false,
});
await admin.firestore().collection('users').doc(user.uid).set({
displayName: user.displayName,
id: user.uid,
email: user.email,
role: 'clientAccess',
created: fb.firestore.FieldValue.serverTimestamp()
})
return { response: user }
});
我可以将 return admin.firestore().col... 部分放在哪里才能使这项工作正常进行?
谢谢!
我要建议你问的问题不对。您手头的任务是:
- 创建用户帐户
- 将包含该用户相关信息的文档添加到 Firestore
- 将用户对象发送回调用客户端。
对于任务 2,您根本不需要 return
。对于步骤 3,您只需要一个 return。您可以简单地在 async/await 的每个函数上使用 async/await =28=] 承诺在函数 return 将最终结果发送给客户之前确保它们都以正确的顺序执行和完成。
const user = await admin.auth().createUser({ ... });
await admin.firestore().collection('users').doc(user.uid).set({ ... })
return { response: user }
除非您有一些特殊的错误处理,否则您可能也不必担心 try/catch。