FirebaseObjectObservable不及时返回对象

时间:2017-07-26 18:24:19

标签: javascript typescript firebase ionic2 angularfire2

我试图从firebase获取两个对象并在显示之前操纵数据。 不幸的是,我只得到其中一个对象,但我不知道为什么。

以下是代码段:

page.ts

let item: ItemModel = this.ItemProvider.getItem(itemID);
let itemInfo: ItemInfoModel = this.ItemProvider.getItemInfo(itemID);

provider.ts

item: ItemModel = new ItemModel();
itemInfo: ItemInfoModel = new ItemInfoModel();

  getItem(itemID: string): ItemModel {
    var subscription = this.db.object(`/items/${itemID}`, { preserveSnapshot: true })
      .subscribe(item => {
      let i: ItemModel = item.val();
      this.item = i;
    });
  subscription.unsubscribe();
  return this.item;
  }

  getItemInfo(itemID: string): ItemInfoModel {
    var subscription = this.db.object(`/itemInfo/${itemID}`, { preserveSnapshot: true })
      .subscribe(itemInfo => {
      let i: ItemInfoModel = itemInfo.val();
      this.itemInfo = i;
    });
  subscription.unsubscribe();
  return this.itemInfo;
  }

正如您所看到的,两个函数都相似,但getItemInfo仍然没有及时返回值。

当我在page.ts中执行console.log时会打印以下内容

console.log(item); => Object { data... }
console.log(itemInfo); => ItemInfoModel { }

我尝试切换函数的调用并首先获取itemInfo,但它没有任何效果。

我的火力架结构如下:

- firebase
    - items
        -KIedkI3983ndK
            -name
            -img
            -price
            -actualInfo => KIe3jkdl83dsf
    - itemInfo
        -KIeDjeidl3njd
            -item => KIedkI3983ndK
            -info1
            -info2
        -KIe3jkdl83dsf
            -item => KIedkI3983ndK
            -info1
            -info2

由于我还不熟悉这一点,我尝试了所有我在此处阅读的有关stackoverflow的内容,但没有找到问题的解决方案。

在getItemInfo的订阅中,我确实有正确的值,但在调用return语句之前,它不会写在全局this.itemInfo中。 它在getItem中连接完全相同的代码。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要在FirebaseListObservable选项上添加查询对象。你的'getItemInfo'功能应该是这样的:

$("body, #example").vegas(...);