RxJS Pipe在Angular Resolver中不起作用(但在ngOnInit中可以正常工作)[重复]

问题描述 投票:2回答:1

我们试图在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;

    }

mainmain.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个回答
1
投票

找到答案here,它应该适用。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.