角解析器无法解析?

时间:2019-12-22 18:41:13

标签: javascript angular typescript rxjs

这是问题的演示:

https://stackblitz.com/edit/angular-routing-with-resolver-observable?file=src%2Fapp%2Fpost-resolver.service.ts

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:”。 >

有想法吗?

提出了有关Angular的问题

https://github.com/angular/angular/issues/34535

1 个答案:

答案 0 :(得分:-1)

如果this.cs.loadingTopicStore$的可观察对象发出一个以上的false值(在这种情况下这样做),则整个序列将失败并挂起。

解决方案是使用false来完成流或将通知限制为一个takeWhile值,如下所示:

        const topic = await this.cs.loadingTopicStore$.pipe(
            takeWhile(v => v != false, true),
            switchMap((v) => { ...