我们试图在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);
}
找到答案here,它应该适用。
似乎必须在转换运算符旁边添加一个过滤运算符(例如first,last,take ...),以正确返回结果。
问题中的一行:let P = this.afAuth.authState.pipe(T, D)
应该使用过滤运算符进行扩展,例如:let P = this.afAuth.authState.pipe(T, D, first())
。