【发布时间】:2020-01-01 03:31:38
【问题描述】:
我正在使用 Observables 从后端获取数据。在我的函数中,我订阅了我的 observable,当我 console.log() 传回的数据似乎返回了两次。首先是一个空对象,然后是我期望的数据。
这给我带来了问题,因为我正在尝试使用 for...in 循环将数据的键与另一个对象的键进行比较,以便我可以匹配这些值。我得到一个 TypeError: Cannot read property '0' of undefined 因为数据首先返回一个空对象。这让我很困惑,因为我在订阅的回调方法中执行 console.log() 。
回调方法的重点不就是等到数据到达吗?
我尝试了一个回调函数以及将 for...in 直接放在订阅中,但由于对象首先返回空,所以都不起作用。我做错了什么?
this.memberService.memberDetails.subscribe(member => {
this.member = member;
this.member_id = this.authService.loggedInUser.app_user_data.member_id;
this.parseAddress();
console.log('member subscribe', this.member);
this.formData();
});
// 更新:会员服务代码
private _memberDetails = new BehaviorSubject<any>({});
public get memberDetails() {
return this._memberDetails.asObservable();
}
// 注意 console.log() 已经触发了两次
formData() {
for (const flatProfileKey in this.profileData['permanent_address'][0]) {
for (const key in this.member['addresses'][0]) {
if (flatProfileKey === key) {
this.profileData[key] = this.flatProfile[key];
console.log('profileData perament_address', this.profileData['permanent_address'][0])
}
}
}
}
// 如果我尝试遍历数据,它会返回一个未定义的错误,大概是因为订阅首先返回一个空对象,所以没有什么可以循环的
【问题讨论】:
-
请在您有
memberDetails设置的地方分享您的memberService代码。或者,您可以使用filterrxjs 运算符来过滤不需要的数据。 -
请看更新。
标签: javascript angular for-loop observable