【发布时间】:2019-12-22 18:41:13
【问题描述】:
这是问题的演示:
将this.observeLoading$ 换成of(false) 使其工作,所以我认为这与this.observeLoading$ 由ReplaySubject 通知这一事实有关,该ReplaySubject 可以提供多个通知......
这里有更多细节:
首先这确实解决了:
async resolve(
route: ActivatedRouteSnapshot) {
const topic = await of(false).pipe(
switchMap((v) =>{
console.log("MADE IT THIS FAR: ", v)
return of(new Topic)
})).toPromise()
console.log("THE TOPIC RETURNED IS", topic)
return topic;
在上述情况下,它会记录所有内容并执行导航。
在以下情况下,它会记录“MADE IT THIS FAR: false”,但随后会挂起。
async resolve(
route: ActivatedRouteSnapshot) {
const id = route.paramMap.get('id')
const topic = await this.cs.loadingTopicStore$.pipe(
switchMap((v) =>{
console.log("MADE IT THIS FAR: ", v)
return of(new Topic)
})).toPromise()
console.log("THE TOPIC RETURNED IS", topic)
return topic;
据我所知,这两种情况基本相同。唯一的区别是第一个我们使用of(false),第二个我们使用this.cs.loadingTopicStore$,这两个都在触发,因为在这两种情况下都记录了“MADE IT THIS FAR:”。
想法?
提交了 Angular 问题
【问题讨论】:
-
您可以尝试将
switchMap替换为map并直接返回值而不是of()运算符,或者是否有必要使用switchMap? -
什么是
this.cs.loadingTopicStore$?你如何定义它以及如何激发它。 -
我正在使用不同版本的切片库进行演示。它基于
ReplaySubject,因此它始终提供最后一个值。 -
我制作了这个问题的演示。如果我们使用
of,则路由会解析,但如果我们使用observeLoading$,则路由不会解析,但它仍然会到达正在创建帖子的日志记录点。 -
toPromise 返回一个在可观察对象完成时解析的promise。为什么不直接返回 observable?
标签: javascript angular typescript rxjs