[英]How to return observable in observable map in Angular
我实在找不到我想做的话。 所以我只展示自己的尝试。这是我尝试过的:
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)的行中返回。
但是,我仍然无法以一种很好的方式使其工作。
如果要从一个可观察的对象切换到另一个可观察的对象并使用前一个的值,则可以使用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( updateProfile
)的结果提供给订户。
如果要将映射的可观测值映射到另一个可观测值, switchMap
使用mergeMap
, switchMap
或concatMap
(取决于希望如何发射新创建的观测值的值)。
await
不是可观察对象,仅是承诺。
当您不需要发射的值,而只想切换到另一个可观察值时,可以使用switchMapTo()运算符。
register(): Observable<boolean> {
return this.registerNew().pipe(
switchMapTo(this.updateProfile()),
map(Boolean)
);
}
您需要concatMap
。
this.authenticationService.currentUser.pipe(
concatMap((principal: Principal) => this.getUser(principal.id))
).subscribe((user: User) => {
console.log(user); // the user
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.