来自Firestore onSnapshot的响应是2条记录,我将其推入名为shop的数组中。
this.db.collection("Countries").doc("AU")
.collection("cPostcode").doc(this.searchby)
.collection(this.shop).where(how, '==', true)
.onSnapshot(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
shop.push(doc.data());
})
});
console.log('shop.length', shop.length, 'Shop', shop);
if (shop.length) {
this.shopList = shop; .........
我使用shop.length > 0
知道是否返回了任何数据,但即使数组中有2个项目,shop.length
也等于0。
控制台日志的输出显示length:2
-
shop.length 0 shop []
0:{ABN: "1", ACN: "2"}
1:{ABN: "3", ACN: "4"}
length:2
__proto__:Array(0)
我已经尝试在forEach中放置一个标志,但是它超出了范围,所以我尝试了“this.count”变量。我一直在打算和关闭这几天。我用google搜索了这个问题和一般的打字稿帮助,但似乎没有其他人有这个问题。我究竟做错了什么?
答案 0 :(得分:0)
要可靠地获得长度,您需要确保等待结果。
this.db.collection("Countries").doc("AU")
.collection("cPostcode").doc(this.searchby)
.collection(this.shop).where(how, '==', true)
.onSnapshot((querySnapshot) => {
// In here, we have data
querySnapshot.forEach((doc) => {
shop.push(doc.data());
});
console.log('shop.length', shop.length, 'Shop', shop);
// Therefore, shop.length should work _reliably_
if (shop.length) {
alert(shop.length);
}
});
替代方法包括使用promises,或者在获得结果时调用函数(而不是仅仅查看该回调函数中的所有代码)。