Выполнить запрос Firestore в функции JavaScript - PullRequest
1 голос
/ 18 мая 2019

Я хочу выполнить запрос Firestore в функции JavaScript, но у меня возникают трудности с обещаниями.

Допустим, я хочу получить идентификатор документа от пользователя. Итак, я создал эту функцию 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 Ответ

3 голосов
/ 18 мая 2019

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));
});
...