我真的找不到我想做的事。所以我只展示我的尝试。这就是我尝试过的:
register(): Observable<boolean> {
return this.registerNew().pipe(
map(userData => {
return this.updateProfile().pipe( (*1)
map(profileData => {
return profileData ? true : false;
}))
}))
}
但是我当然会收到以下错误消息:
Type 'Observable<false | Observable<boolean>>' is not assignable to type 'Observable<boolean>'.
我也在考虑使用await而不是在我标记为(* 1)的行中返回。
但是我仍然无法以一种很好的方式使其工作。
答案 0 :(得分:2)
如果您想从一个可观察的对象切换到另一个并使用前一个的值,可以使用switchMap
运算符
register(): Observable<boolean> {
return this.registerNew().pipe(
switchMap(userData => {
return this.updateProfile().pipe( (*1)
map(profileData => {
return profileData ? true : false;
}))
}))
}
发生registerNew
的原因,然后将结果值传递到switchMap
返回的observable(switchMap必须返回一个observable才能工作),然后将内部的observable的结果传递给{{1} })来到订户。
答案 1 :(得分:1)
如果您想将可观测对象的值映射到另一个可观测对象,则要使用mergeMap
,switchMap
或concatMap
(取决于您希望新创建的值的方式)可以观察到)。
await
不适用于可观察对象,仅适用于承诺。
答案 2 :(得分:1)
当您不需要发射值,而只想切换到另一个可观察值时,可以使用switchMapTo()运算符。
register(): Observable<boolean> {
return this.registerNew().pipe(
switchMapTo(this.updateProfile()),
map(Boolean)
);
}
答案 3 :(得分:0)
您需要concatMap
。
this.authenticationService.currentUser.pipe(
concatMap((principal: Principal) => this.getUser(principal.id))
).subscribe((user: User) => {
console.log(user); // the user
});