【问题标题】:how to handle firebase query if no data如果没有数据如何处理firebase查询
【发布时间】:2020-11-09 11:37:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript angular firebase google-cloud-firestore angularfire


    【解决方案1】:

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

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

    【讨论】:

    • thanx 我明白了,但它没有按照你的建议工作,我会尝试使用过滤器
    • @AliMaher 你解决了吗?
    • 仍然没有,但如果数据可用,我会解决它,因为没有错误。
    • @JanHernandez 如果通过正常检查修复它,则没有可观察对象或操作员修复它; `mergeMap(markets => { if (!markets.length) { this.noDataSubject.next(true); } return combineLatest([markets], `
    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多