这是问题的演示:
用this.observeLoading$
退出of(false)
可以使它工作,所以我认为这与this.observeLoading$
由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:”。 >
有想法吗?
答案 0 :(得分:-1)
如果this.cs.loadingTopicStore$
的可观察对象发出一个以上的false
值(在这种情况下这样做),则整个序列将失败并挂起。
解决方案是使用false
来完成流或将通知限制为一个takeWhile
值,如下所示:
const topic = await this.cs.loadingTopicStore$.pipe(
takeWhile(v => v != false, true),
switchMap((v) => { ...