Firebase Cloud Functions - 如何在多个 .then() 方法中使用相同的 return 值
Firebase Cloud Functions - How to use same return value in multiple .then() methods
我正在尝试使用 Firebase Admin SDK 编写一个执行以下操作的 Firebase 云函数:
- 使用 email/password 创建用户。
- 创建一个 Firestore 文档,引用新创建的 UID。
- Returns 如果 1 和 2 成功,则向客户端发送 Firebase JWT 令牌。
我目前的代码如下:
exports.createUser = functions.https.onCall((data, context) => {
return admin
.auth()
.createUser({
email: data.email,
password: data.password,
phoneNumber: data.number,
})
.then((user) => {
return admin
.firestore()
.collection("collectionName")
.doc(user.uid)
.set({});
})
.catch((error) => {
console.log("Error creating new user:", error);
});
});
我正在努力解决的是链中的下一个 .then()
,到 return JWT 令牌。我知道 return JWT 的实际 Admin SDK 代码,但我不确定如何在多个 .then()
中访问新用户的属性,同时还 returning一个承诺(我认为这是正确终止功能所必需的?)
如何添加另一个可以访问 user.uid
的 .then()
并确保函数实例不会过早终止?
您可以简单地使用如下所示的变量:
exports.createUser = functions.https.onCall((data, context) => {
let userObject;
return admin
.auth()
.createUser({
email: data.email,
password: data.password,
phoneNumber: data.number,
})
.then((user) => {
userObject = user
return admin
.firestore()
.collection("collectionName")
.doc(user.uid)
.set({});
})
.then(() => {
const user = userObject;
// Do whathever you want with user
await function(user)
// Don't forget to return data that can be JSON encoded, see the doc: https://firebase.google.com/docs/functions/callable#sending_back_the_result
// In your case the JWT Object I guess
return ...
})
.catch((error) => {
console.log("Error creating new user:", error);
// See the doc: https://firebase.google.com/docs/functions/callable#handle_errors
});
});
如果你使用 async/await
就更简单了:
exports.createUser = functions.https.onCall(async (data, context) => {
const user = await admin
.auth()
.createUser({
email: data.email,
password: data.password,
phoneNumber: data.number,
});
await admin
.firestore()
.collection("collectionName")
.doc(user.uid)
.set({});
// Do whathever you want with user
await function(user)
return ...
});
我正在尝试使用 Firebase Admin SDK 编写一个执行以下操作的 Firebase 云函数:
- 使用 email/password 创建用户。
- 创建一个 Firestore 文档,引用新创建的 UID。
- Returns 如果 1 和 2 成功,则向客户端发送 Firebase JWT 令牌。
我目前的代码如下:
exports.createUser = functions.https.onCall((data, context) => {
return admin
.auth()
.createUser({
email: data.email,
password: data.password,
phoneNumber: data.number,
})
.then((user) => {
return admin
.firestore()
.collection("collectionName")
.doc(user.uid)
.set({});
})
.catch((error) => {
console.log("Error creating new user:", error);
});
});
我正在努力解决的是链中的下一个 .then()
,到 return JWT 令牌。我知道 return JWT 的实际 Admin SDK 代码,但我不确定如何在多个 .then()
中访问新用户的属性,同时还 returning一个承诺(我认为这是正确终止功能所必需的?)
如何添加另一个可以访问 user.uid
的 .then()
并确保函数实例不会过早终止?
您可以简单地使用如下所示的变量:
exports.createUser = functions.https.onCall((data, context) => {
let userObject;
return admin
.auth()
.createUser({
email: data.email,
password: data.password,
phoneNumber: data.number,
})
.then((user) => {
userObject = user
return admin
.firestore()
.collection("collectionName")
.doc(user.uid)
.set({});
})
.then(() => {
const user = userObject;
// Do whathever you want with user
await function(user)
// Don't forget to return data that can be JSON encoded, see the doc: https://firebase.google.com/docs/functions/callable#sending_back_the_result
// In your case the JWT Object I guess
return ...
})
.catch((error) => {
console.log("Error creating new user:", error);
// See the doc: https://firebase.google.com/docs/functions/callable#handle_errors
});
});
如果你使用 async/await
就更简单了:
exports.createUser = functions.https.onCall(async (data, context) => {
const user = await admin
.auth()
.createUser({
email: data.email,
password: data.password,
phoneNumber: data.number,
});
await admin
.firestore()
.collection("collectionName")
.doc(user.uid)
.set({});
// Do whathever you want with user
await function(user)
return ...
});