【问题标题】:Angular subscribe to observable then return a new oneAngular 订阅 observable 然后返回一个新的
【发布时间】:2018-11-23 08:13:06
【问题描述】:

我正在使用 HttpClient 来 get 来自网络服务的数据。我想订阅结果数据并将其从 JSON 转换为实际的类,然后从该方法返回这些类的 Observable。基本上,当调用者的subscribe 触发时,我希望它能够获取课程。

我对 angular 和 observables 很陌生,所以我不确定如何进行这种链接。所以我想要类似的东西:

constructor(private http: HttpClient) {}

getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
    return this.http.get("...")
        .subscribe(json => json.map(obj => {
            let ar = new EhsAssessmentAr();
            ar.id = obj['id'];
            ...
            return ar;
    }));
}

这当然不会真正编译,然后调用者会这样做:

this.getExistingArsByLab(12).subscribe(ars => { ... });

那时我会将ars 作为实际的EhsAssessmentAr[]

【问题讨论】:

    标签: angular angular-observable


    【解决方案1】:

    结合@Antoniosss 的回答,我认为这应该可以解决您的问题:

    getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
     return this.http.get("...")
        .pipe(map(obj =>  {
            return obj.map(element => {
               let ar = new EhsAssessmentAr();
               ar.id = element['id'];
               ...
               return ar;
            });
     }));
    }
    

    请注意,Observable 中的 mapArray.map() 不同

    【讨论】:

      【解决方案2】:

      不要马上订阅,但 pipemap

      getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
          return this.http.get("...")
              .pipe(map(obj =>  {
                  let ar = new EhsAssessmentAr();
                  ar.id = obj['id'];
                  ...
                  return ar;
          }));
      

      }

      您必须修复括号并添加正确的映射。

      【讨论】:

      • 这似乎只返回一个 ar 对象而不是它们的数组。
      • 你现在应该知道该怎么做了。
      • 不是真的,因为我很困惑为什么编译器会说它返回单个对象而不是多个对象时 map 对多个对象起作用。
      • 这就是 Rxjs 的工作原理。 .subscribe 不返回任何内容,而 .map 返回一个新的 Observable,它又与您的方法 Observable&lt;EhsAssessmentAr[]&gt; 的返回类型匹配。
      • @ChauTran 正确,但编译器显示 Observable&lt;EhsAssessmentAr&gt; is not assignable to type Observable&lt;EhsAssessmentAr[]&gt;。所以它认为地图只返回一个对象。对不起,我只是不明白。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 2017-11-30
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多