在JavaScript函数中执行Firestore查询

时间:2019-05-18 14:14:56

标签: javascript firebase promise google-cloud-firestore

我想在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查询结束后,哪种语法正确?

1 个答案:

答案 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));
});