我想在JavaScript函数中执行Firestore查询,但是在兑现承诺方面遇到了一些困难。
比方说,我想从用户那里获得文档ID。所以我创建了这个JavaScript函数:
function getUid(email) {
db.collection("users").where("email", "==", email)
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
return doc.id;
});
})
.catch(function(error) {
return error;
});
}
现在,当我调用函数res.send(getUid("user@example.com"))
时,它将返回undefined
。
等待Firestore查询结束后,哪种语法正确?
答案 0 :(得分:3)
get()
是一个异步函数,因此您需要将其包装到async
函数中。另外,您不会从getUid
函数返回任何内容,而只是在forEach
参数内部返回。如果要从快照中获取所有id
,则可以使用map
函数。
async function getUids(email) {
const db = admin.firestore();
const querySnapshot = await db.collection("users").where("email", "==", email).get();
const uids = querySnapshot.docs.map((doc) => { return doc.id });
return uids;
}
exports.yourFunction = functions.http.onRequest(async (req, res) => {
const email = // ...
res.send(await getUids(email));
});