Angular 在服务中的HTML请求之后在内部调用另一个HTTp请求

Angular 在服务中的HTML请求之后在内部调用另一个HTTp请求,angular,rxjs,pipe,subscribe,switchmap,Angular,Rxjs,Pipe,Subscribe,Switchmap,在一些angular服务中,我需要调用一个名为的PUT方法,在它完成后,我需要调用另一个GET方法。然后,GET方法的结果应该存储在服务本身的一个变量中 我写的代码有一些问题。因为当我从组件调用服务时,组件中显示为未定义的isUpdateSuccess 在这里,我不需要将“application”对象传递给组件。我只需要将ApplicationStatusModel作为可观察对象传递。但我需要将应用程序对象保存到一个名为myApplication的变量中,正如我前面提到的 我读了几篇文章,也浏览

在一些angular服务中,我需要调用一个名为的PUT方法,在它完成后,我需要调用另一个GET方法。然后,GET方法的结果应该存储在服务本身的一个变量中

我写的代码有一些问题。因为当我从组件调用服务时,组件中显示为未定义的isUpdateSuccess

在这里,我不需要将“application”对象传递给组件。我只需要将ApplicationStatusModel作为可观察对象传递。但我需要将应用程序对象保存到一个名为myApplication的变量中,正如我前面提到的

我读了几篇文章,也浏览了一些Stackoverflow帖子。还没有运气

服务

private myApplication: ApplicationHeader;

updateStudentAssessmentStatus(model: ApplicationStatusModel): Observable<boolean> {

const data = this.svcHttp.put<boolean>(`${this.routePrefix}/${model.studentID}/applicationAssessmentStatus`, model)
  .pipe(
    switchMap(() => this.getApplicationHeaderById(model.studentID)
      .pipe(map(application => {
        console.log(`Application from update status ${JSON.stringify(application)}`);
        this.myApplication = application;
      })))
  );
return data;
map()
用于将事件转换为其他事件。您当前正在使用它将ApplicationHeader转换为
未定义的
,因为您不从映射回调返回任何内容

要应用副作用,
tap()
是您所需要的

你也不需要这么多的筑巢

private myApplication: ApplicationHeader;

updateStudentAssessmentStatus(model: ApplicationStatusModel): Observable<ApplicationHeader> {

  return this.svcHttp.put<boolean>(`${this.routePrefix}/${model.studentID}/applicationAssessmentStatus`, model).pipe(
    switchMap(() => this.getApplicationHeaderById(model.studentID)),
    tap(application => {
      console.log(`Application from update status ${JSON.stringify(application)}`);
      this.myApplication = application;
    })
  );
}
私有myApplication:ApplicationHeader;
updateStudentAssessmentStatus(模型:ApplicationStatusModel):可观察{
返回此.svcHttp.put(`${this.routePrefix}/${model.studentID}/applicationAssessmentStatus`,model).pipe(
switchMap(()=>this.getApplicationHeaderById(model.studentID)),
点击(应用=>{
log(`Application from update status${JSON.stringify(Application)}`);
this.myApplication=application;
})
);
}
您可以在第一次http订阅时使用.pipe()

return your-First-Http-Request().pipe(tap((res: your response) => {

        your-First-Http-Request()
    }
})

感谢您的解释和代码。在应用它之后,我得到了一个错误。然而,我正试图自己摆脱这些错误。我将在下面对错误进行注释,仅供参考。:-)src/app/main/services/application.service.ts(1310,5)中出错:错误TS2322:类型“Observable”不可分配给类型“Observable”。类型“boolean | ApplicationHeader”不可分配给类型“boolean”。类型“ApplicationHeader”不可分配给类型“boolean”。src/app/main/services/application.service.ts(1314,9):错误TS2322:类型“boolean | ApplicationHeader”不可分配给类型“ApplicationHeader”。类型“false”不可分配给类型“ApplicationHeader”。很抱歉输入错误。updateStudentAssessmentStatus的reurn类型应该是可观察的,而不是可观察的。您知道更新和下面的get是成功的,因为返回的observable没有发出任何错误。不是因为它发出布尔值。
return your-First-Http-Request().pipe(tap((res: your response) => {

        your-First-Http-Request()
    }
})