繁体   English   中英

如何在Angular的可观察地图中返回observable

[英]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使用mergeMapswitchMapconcatMap (取决于希望如何发射新创建的观测值的值)。

await不是可观察对象,仅是承诺。

当您不需要发射的值,而只想切换到另一个可观察值时,可以使用switchMapTo()运算符。

register(): Observable<boolean> {
   return this.registerNew().pipe(
     switchMapTo(this.updateProfile()),
     map(Boolean)
   );
}

您需要concatMap

  1. 此示例仅在返回用户ID时才要求它
  2. 第二个“ observable”使用第一个的返回值进行用户查询
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM