Firestore实时监听多个文档的实时监听器

时间:2020-08-11 01:56:42

标签: javascript firebase google-cloud-firestore async-await

我想知道Firestore的实时侦听器是否支持async await而不是Promise?

文档建议:

var unsubscribe = db.collection("cities").where("state", "==", "CA").onSnapshot(function(querySnapshot) {
    var cities = [];
    querySnapshot.forEach(function(doc) {
       cities.push(doc.data().name);
    });
    console.log("Current cities in CA: ", cities.join(", "));
});
unsubscribe();

我可以使用async await编写上述实时侦听器吗?我尝试了以下操作,但侦听器不再起作用。另外,将无法再分离侦听器。

var querySnapshot = db.collection("cities").where("state", "==", "CA").onSnapshot
var cities = [];
querySnapshot.forEach(function(doc) {
   cities.push(doc.data().name);
});
console.log("Current cities in CA: ", cities.join(", "));

我该如何使用async await编写它,并且还可以使用分离器?

1 个答案:

答案 0 :(得分:3)

异步/等待(与promises一起使用)与侦听器一起使用没有意义。许诺表示以最终值或错误结尾的工作单元。侦听器是一个持续的过程,直到使用取消订阅功能将其删除后,该过程才会结束。它们是根本不同的东西。

如果您要进行一次查询以保证可以等待,则应使用get()而不是documentation中所述的onSnapshot()。当结果随时间变化时,如果要更新查询,请仅使用侦听器。