理解上的问题或这里的其他内容。
我彼此调用了两个方法,它们带有重新约定的承诺。当我在ngOnInit()中使用它时,它可以正常工作,但是当我单击一个按钮并且再次调用这两个方法时,它不再起作用了,我真的不知道为什么。试图用控制台日志进行调试,但这没有任何信息。
profileLoaded: Observable<User>;
ngOnInit() {
this.getUserData().then(res => this.getProfileImageAndUpdateCountry());
}
getUserData() {
return new Promise((resolve, reject) => {
this.profileLoaded = this.userService.getProfile().pipe(
tap(user => this.editForm.patchValue(user))
);
resolve();
});
}
getProfileImageAndUpdateCountry() {
this.profileLoaded.subscribe(
userData => {
console.log(userData);
this.isoCodeOld = userData.country;
this.country = userData.country;
this.profileImage = userData.profileImage;
this.userService.profileImageUpdate$.next(this.profileImage);
this.checkCountries();
});
}
console.log(this.editForm.get('country').value);
setTimeout(a => {
console.log("after: "+this.editForm.get('country').value);
}, 500, [])
我将尝试解释问题。在我的ngOnInit()
中,我调用了2个方法。关键是this.checkCountries();
必须是最后一个被调用的东西,因为它会检查来自服务器的国家/地区数据(ISO代码)并将其转换为应用程序有效语言的完整语言名称。初始化后,它在正常视图和编辑视图以及“阿尔及利亚”中都可以代替“ DZ”很好地工作。
但是,如果我在编辑视图中并单击中止,则仅返回到该视图,我想再次调用此方法,因为现在可能已更新了某些内容。但是然后我可以通过日志看到this.checkCountries()
被调用,并且它再次更改了名称,但是在短暂的超时后,如果我在输入字段中查看它是“ DZ”,因为(我至少认为,这是唯一的可能)this.editForm.patchValue(user)
的调用尚未完成,并且会覆盖this.checkCountries()
那怎么可能?