RxJS Pipe не работает в Angular Resolver (но отлично работает в ngOnInit)

мы попытались добавить канал RxJS в наш Angular Resolver: процесс распознавателя запускается, но не заканчивается, поэтому мы не можем показать результат в нашем 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;

    }

Пример с ngOnInit на mainComponent.ts (работает!):

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);

    }

person SDiver    schedule 18.12.2017    source источник


Ответы (1)


Нашел ответ здесь, он должен быть применимый.

Кажется, что оператор фильтрации (например, first, last, take...) должен быть добавлен вместе с оператором преобразования, чтобы правильно вернуть результат.

Строка из вопроса: let P = this.afAuth.authState.pipe(T, D)
должна быть дополнена оператором фильтрации, например: let P = this.afAuth.authState.pipe(T, D, first()).

person fishBonE    schedule 13.06.2020