【问题标题】:How to get a single document data in a Firebase Firestore (without promises)如何在 Firebase Firestore 中获取单个文档数据(没有承诺)
【发布时间】:2017-11-27 23:08:55
【问题描述】:

我试图获取单个文档的数据并将其保存到一个变量中,以便稍后在另一个逻辑操作中使用它。 firestore 文档显示只有通过 promises 才能做到这一点,但我不能将 doc.data() 值设置为变量以供以后使用,只能在 then() 或 catch() 方法中使用。我可以在那里设置一个变量,但我不能在承诺之外使用它。

Firestore 文档示例:

var docRef = db.collection("cities").doc("SF");

docRef.get().then(function(doc) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
    } else {
        console.log("No such document!");
    }
}).catch(function(error) {
    console.log("Error getting document:", error);
});

【问题讨论】:

  • 如果变量是在外部声明的,你可以很好地在then函数中设置它。
  • 不要与异步作斗争,你永远不会赢。了解异步代码是如何工作的,如何使用它。您基本上要求的是如何从异步函数中获得同步结果 - 它永远无法完成。也许async/await“糖”会帮助你。虽然它仍然是异步的,但对某些人来说看起来不那么令人生畏

标签: javascript google-cloud-firestore


【解决方案1】:

正如 Jaromanda X 所说:您最好接受 Firebase 和大多数现代网络的异步特性。您越早掌握编程模式,您就能越早在这种范式中恢复生产力。

我发现重构问题最有帮助。而不是“加载一个文档,然后用它做点什么”我把它框定为“首先开始加载一个文档。一旦加载了文档,就用它做点什么”。

实际上,这意味着您将需要文档的代码移至完成处理程序,您现在拥有日志记录语句。

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多