我试图从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中连接完全相同的代码。
有什么想法吗?
答案 0 :(得分:0)
您需要在FirebaseListObservable选项上添加查询对象。你的'getItemInfo'功能应该是这样的:
$("body, #example").vegas(...);