Cloud Firestore查询有时会运行但不总是

时间:2018-04-23 01:06:33

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

这让我很难过。我有一个方法来搜索Firestore数据库中的项目。当我直接从一次性测试中调用该方法时,它可以工作。当我从我的应用程序的另一部分使用完全相同的输入调用该方法时,它不起作用。

以下是进行搜索的方法:

  getProductsStartingWithCategory(textSoFar: string): Observable<Product[]> {
    console.log('searching for ', textSoFar);
    let endAt = textSoFar + '\uf8ff';
    let filteredCollection: AngularFirestoreCollection<Product> =
      this.afs.collection('products', ref =>
        ref.orderBy('materialType').limit(30).startAt(textSoFar).endAt(endAt)
      );

    return filteredCollection.snapshotChanges().map(changes => {
      return changes.map(a => {
        console.log('matched one', a);
        const data = a.payload.doc.data() as Product;
        data.id = a.payload.doc.id;
        return data;
      });
    });
  }

当我使用测试按钮从应用程序的第一页直接调用该方法时,它可以工作。该方法如下:

  testTheThing() {
    let text: string = 'Car';
    this.productService.getProductsStartingWithCategory(text)
      .subscribe(data => {
        console.log('success', data);
      });
  }

同样,当我调用这种方法时,我得到了预期的结果(数据库中的材料匹配材料类型&#39;地毯&#39;。)成功!

但是,当我在应用程序的其他页面中使用该方法时,它不会返回任何结果。该页面有点复杂 - 本质上是在用户输入更改时调用该方法。以下是该方法的相关部分:

productCategoryChanged(productPurchase: ProductPurchase) {
if (productPurchase.materialType) {
  console.log('searching for products starting with "' + productPurchase.materialType + '"');

  let unsubscribe = this.productService.getProductsStartingWithCategory(productPurchase.materialType).subscribe(products => {
    products.forEach(product => {
      // logic goes here...
    });
  });
  // rest of method omitted

在这两种情况下,我都会看到&#34;搜索汽车&#34;在console.log消息中。搜索文本完全相同。我已经尝试过多次使用大量不同的搜索文本(所有这些都在数据库中)。日志记录显示正在使用正确的输入调用方法,但由于某种原因,我只能在从&#34; test&#34;中调用它时找到结果。方法。那是为什么?

我试过修剪输入。我还有另一批产品&#39;连接到一个可观察的,但我不认为这很重要。我也已经为这个&#34;客户&#34;使用了这个确切的策略。搜索,这工作正常。这&#34;产品&#34;搜索几乎相同,但它不起作用。

0 个答案:

没有答案