【问题标题】:Perform Firestore query in a JavaScript function在 JavaScript 函数中执行 Firestore 查询
【发布时间】:2019-10-05 13:48:06
【问题描述】:

我想在 JavaScript 函数中执行 Firestore 查询,但在使用 Promise 时遇到了一些困难。

假设我想从用户那里获取文档 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 查询完成的正确语法是什么?

【问题讨论】:

  • res 是什么,你在哪里称呼它?
  • res.send 仅用于在 Google 云功能中发送响应。

标签: javascript firebase promise google-cloud-firestore


【解决方案1】:

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

【讨论】:

  • 感谢这真的帮助了我!但是如何通过 Promise 捕获错误呢?
  • 如果您使用await,您可以将其包装到try-catch 语句中。如果您使用的是Promise.then,则可以在其后添加.catch 处理程序。
  • 谢谢!你帮我弄清楚了承诺。
猜你喜欢
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 2018-03-20
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
相关资源
最近更新 更多