我有一个 Firebase Cloud 功能,可以将新通过身份验证的用户添加到 Firestore 数据库中。
当前函数
exports.createUserAccount = functions.auth.user().onCreate((user) => {
const uid = user.uid;
const privateUserInfoRef = admin.firestore().doc(`/privateUserInfo/${uid}`);
return privateUserInfoRef.set({
isAnonymous: true,
avgRating: 0,
numRatings: 0,
loggedInAt: Date.now()
});
});
但是,我想在 return privateUserInfoRef.set({
完成后返回另一个 promise。
我想改变 avgRating
& numRatings
并将其设置在 admin.firestore().doc('/publicUserInfo/${uid} ');
代替。
最佳答案
如果你想运行多个操作,一个接一个地运行,并返回最后一个(或第一个失败的)的结果,你可以链接 then()
子句:
return privateUserInfoRef.set({
isAnonymous: true,
avgRating: 0,
numRatings: 0,
loggedInAt: Date.now()
}).then((resultOfSet) => {
return anotherRef.set(...);
});
您可以根据需要重复此链。
如果您有多个可以并行运行的操作,您也可以使用 Promise.all()
返回所有操作的组合结果:
return Promise.all([
privateUserInfoRef.set(...)
anotherRef.set(...)
]);
返回值将是一个数组,其中包含各个 set()
操作的结果。
这里我只是使用set()
操作作为例子。此模式适用于返回 promise 的任何调用,包括(对于实时数据库)once()
和 push()
,但也适用于返回 promise 的非 Firebase 操作.
关于javascript - 返回多个 promise (Firebase 云函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59207057/