如果没有数据,如何处理firebase查询



我正在尝试为父集合中的每个文档获取集合及其子集合。。编辑

fetchNewMarkets() {
this.firestore.collection<Market>('markets', ref => {
const key = `name.ar`;
return ref.orderBy(key).where('reviewResult', '==', true);
}).snapshotChanges()
.pipe(
filter(snapshot => snapshot.length > 0),
mergeMap(markets => {
return combineLatest(
of(markets),
combineLatest(
markets.map(market => {
return this.firestore.collection<MarketProduct>(`markets/${market.payload.doc.id}/products`)
.snapshotChanges().pipe(filter(snapshot => snapshot.length > 0), map(products => {
return products;
}))
})
)
)
}), map(([markets, products]) => {
let returnedMarkets: MarketId[];
products.forEach(prodArr => {
returnedMarkets = markets.map(market => {
return {
id: market.payload.doc.id,
...market.payload.doc.data() as Market,
products: prodArr
.filter(product => product.payload.doc.ref.path === `markets/${market.payload.doc.id}/products/${product.payload.doc.id}`)
.map(product => {
return {
id: product.payload.doc.id,
...product.payload.doc.data() as MarketProduct
} as MarketProductId
})
} as MarketId
})
})
console.log(returnedMarkets);
return returnedMarkets;
}))
.subscribe(markets => {
this.markets = [];
this.markets = markets;
this.newMarketsChanges$.next(this.markets);
})
}

如果数据不存在问题,但如果集合或子集合中没有数据,则会失败并且无法到达订阅

在处理数据之前,能否先尝试对管道使用过滤器:

...
....
.snapshotChanges()
.pipe(
filter(snapshot=> snapshot.exists),
mergeMap(markets => {.....

最新更新