【问题标题】:Angular resolver not resolving?角度解析器无法解析?
【发布时间】:2019-12-22 18:41:13
【问题描述】:

这是问题的演示:

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

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 问题

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

【问题讨论】:

  • 您可以尝试将switchMap 替换为map 并直接返回值而不是of() 运算符,或者是否有必要使用switchMap
  • 什么是this.cs.loadingTopicStore$?你如何定义它以及如何激发它。
  • 我正在使用不同版本的切片库进行演示。它基于ReplaySubject,因此它始终提供最后一个值。
  • 我制作了这个问题的演示。如果我们使用of,则路由会解析,但如果我们使用observeLoading$,则路由不会解析,但它仍然会到达正在创建帖子的日志记录点。
  • toPromise 返回一个在可观察对象完成时解析的promise。为什么不直接返回 observable?

标签: javascript angular typescript rxjs


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2022-01-06
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多