使用可观察的。有人可以向我解释这段代码是如何工作的

时间:2018-06-13 06:50:44

标签: observable angular2-observables

public SavePatientEducationDetails(patientEducation: any): Observable<any> {
  return new Observable<any>(obs => {
    this.http.post(environment.API.PATIENT_FAMILLY_EDUCATION + "?isNew=true", patientEducation).subscribe(res => {
      this.response = Object.assign(res);
      setTimeout(() => {
        obs.next(this.response);
        obs.complete();
      }, 500);
    }, err => {
      console.log(err);
    });
  })
}

1 个答案:

答案 0 :(得分:1)

好吧,这是使用observable开头的错误实现。

在此代码中,您首先创建一个新的可观察对象:

new Observable<any>(obs => {});

在此可观察对象中,您发出一个http发布请求(可能保存一些数据),然后订阅该请求以获取其响应值:

new Observable<any>(obs => {
  this.http.post(environment.API.PATIENT_FAMILLY_EDUCATION + "?isNew=true", patientEducation).subscribe(res => {});
});

在订阅中,您使用this.response = Object.assign(res);将响应值复制到新对象 然后,最后,经过500毫秒(由于setTimeOut),您用obs.next()发出响应,并(显然)用obs.complete()方法完成可观察的过程。 这些代码所做的只是在发布请求中添加500ms,已经是可观察的,因此将请求包装在新的可观察对象中是没有用的。

对我来说,这样做将获得完全相同的结果:

public SavePatientEducationDetails(patientEducation: any): Observable<any> {
  return this.http.post(environment.API.PATIENT_FAMILLY_EDUCATION + "?isNew=true", patientEducation);
}

也许您可以说出这段代码的初衷是什么。