【问题标题】:RxJS Pipe does not work in Angular Resolver (but works fine in ngOnInit) [duplicate]RxJS Pipe 在 Angular Resolver 中不起作用(但在 ngOnInit 中工作正常)[重复]
【发布时间】:2018-05-31 13:42:54
【问题描述】:

我们尝试在 Angular Resolver 中添加 RxJS 管道:解析器进程开始但没有结束,因此我们无法在 html 组件中显示结果。

否则,如果我们在主组件的 ngOnInit 方法上移动管道,一切都会正常工作。

我们做错了什么?

myResolver.ts 示例(Resolve 不会结束他的进程):

resolve(): Observable<any> | Promise<any> | any {

    let T = mergeMap((user: firebase.User) => {return Observable.fromPromise(user.getIdToken()) });

    let D = mergeMap((token: string) => { return this.http.get('https://myfakedomain.com/user?access_token=' + token) });

    let P = this.afAuth.authState // return Observable<User>

    .pipe(

    T, D

    )

    return P;

    }

在 mainComponent.ts 上使用 ngOnInit 的示例(有效!):

ngOnInit() {

    let T = mergeMap((user: firebase.User) => { return Observable.fromPromise(user.getIdToken()) });

    let D = mergeMap((token: string) => {return this.http.get(' https://myfakedomain.com/user?access_token=' + token) });

    let P = this.afAuth.authState // return Observable<User>

    .pipe(

    T, D

    ).subscribe(data => this.myData = data);

    }

【问题讨论】:

    标签: angular routing rxjs resolver


    【解决方案1】:

    找到答案here,应该是适用的。

    似乎必须在转换运算符旁边添加过滤运算符(例如,first、last、take...)才能正确返回结果。

    来自问题的行:let P = this.afAuth.authState.pipe(T, D)
    应使用过滤运算符进行扩展,例如:let P = this.afAuth.authState.pipe(T, D, first())

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多