Observable 与 Promised-based 方法中的问题
Issue in Observable vs Promised-based Approach
在我的 Ionic/Angular 应用程序中,我将一些基于承诺的实现转换为使用可观察对象。我 运行 遇到了一个特定功能的问题。我的原始(工作的,基于承诺的)代码如下所示:
async getPlayerStats() {
this.user = await this.mainService.getPlayerStats(this.username);
this.checkRookieTopicCompletionStatus();
}
如您所见,通过上述植入,我在调用 this.checkRookieTopicCompletionStatus();
之前等待 this.user
这很重要,因为我在该函数的 for-loop
中使用了 this.user
.
现在,在我新的基于 observable 的实现中,我的 getPlayerStats()
函数如下所示:
getPlayerStats() {
this.mainService.getPlayerStats(this.username).subscribe(
user => this.user = user,
error => this.errorMsg = error,
);
this.checkRookieTopicCompletionStatus();
}
这里的问题是 this.checkRookieTopicCompletionStatus()
在 this.user
可用之前触发。所以我的问题是,我如何更改上面的这个函数,以便我确信我有 this.user
数据 在 this.checkRookieTopicCompletionStatus()
被调用之前?我是从 subscribe()
块中的某个地方调用它吗?
假设 this.mainService.getPlayerStats(this.username)
returns 一个可观察对象,您需要在订阅中包含直接依赖于此可观察对象的所有语句。尝试以下
getPlayerStats() {
this.mainService.getPlayerStats(this.username).subscribe(
user => {
this.user = user; // <-- this is assigned asynchronously
this.checkRookieTopicCompletionStatus();
},
error => this.errorMsg = error,
);
}
Do I call it from somewhere within the subscribe() block?
是的,就像这样。
getPlayerStats() {
this.mainService.getPlayerStats(this.username).subscribe(
user => {
this.user = user;
this.checkRookieTopicCompletionStatus();
}
error => this.errorMsg = error,
);
}
在我的 Ionic/Angular 应用程序中,我将一些基于承诺的实现转换为使用可观察对象。我 运行 遇到了一个特定功能的问题。我的原始(工作的,基于承诺的)代码如下所示:
async getPlayerStats() {
this.user = await this.mainService.getPlayerStats(this.username);
this.checkRookieTopicCompletionStatus();
}
如您所见,通过上述植入,我在调用 this.checkRookieTopicCompletionStatus();
之前等待 this.user
这很重要,因为我在该函数的 for-loop
中使用了 this.user
.
现在,在我新的基于 observable 的实现中,我的 getPlayerStats()
函数如下所示:
getPlayerStats() {
this.mainService.getPlayerStats(this.username).subscribe(
user => this.user = user,
error => this.errorMsg = error,
);
this.checkRookieTopicCompletionStatus();
}
这里的问题是 this.checkRookieTopicCompletionStatus()
在 this.user
可用之前触发。所以我的问题是,我如何更改上面的这个函数,以便我确信我有 this.user
数据 在 this.checkRookieTopicCompletionStatus()
被调用之前?我是从 subscribe()
块中的某个地方调用它吗?
假设 this.mainService.getPlayerStats(this.username)
returns 一个可观察对象,您需要在订阅中包含直接依赖于此可观察对象的所有语句。尝试以下
getPlayerStats() {
this.mainService.getPlayerStats(this.username).subscribe(
user => {
this.user = user; // <-- this is assigned asynchronously
this.checkRookieTopicCompletionStatus();
},
error => this.errorMsg = error,
);
}
Do I call it from somewhere within the subscribe() block?
是的,就像这样。
getPlayerStats() {
this.mainService.getPlayerStats(this.username).subscribe(
user => {
this.user = user;
this.checkRookieTopicCompletionStatus();
}
error => this.errorMsg = error,
);
}