第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在執(zhí)行另一個可觀察對象之前等待一個可觀察對象檢索數(shù)據(jù)

在執(zhí)行另一個可觀察對象之前等待一個可觀察對象檢索數(shù)據(jù)

幕布斯7119047 2022-12-18 18:54:36
我有這兩個 http 調(diào)用:const newProject = this.newProjectForm.value;newProject.stage = "In progress";let newProjectFromServer: IProject;this.projectService.addProject(newProject).subscribe((data) => {  newProjectFromServer = data;});this.projectService  .addEmployeesToProject(    newProjectFromServer.id,    newProject.assignedEmployees   )   .subscribe(() => {     this.afterSubmit();   });第一個將項目添加到數(shù)據(jù)庫中,因此 Spring 對其應用了一個 id,因此在我作為響應獲得的數(shù)據(jù)中,它現(xiàn)在應該有一個 id。然后我嘗試添加從表單中獲得的指定員工數(shù)組。問題是 newProjectFromServer.id 參數(shù)未定義,因為我認為它是同步讀取的編輯:這是 addEmployeesToProject 函數(shù):addEmployeesToProject(    projectId: number,    employees: IEmployee[]  ): Observable<IEmployee[]> {    return this.httpClient.post<IEmployee[]>(      `${this.baseUrl}/${projectId}/employees`,      {        _embedded: { employees },      }    );  }Api 結果:{"_embedded": {     "employees": [] // IEmployee[] array doesnt get save   },   "_links": {     "self": {      "href": "http://localhost:8080/api/projects/26/employees"     }   } }添加項目請求:addProject(project: IProject): Observable<IProject> {    return this.httpClient.post<IProject>(this.baseUrl, project);  }
查看完整描述

3 回答

?
Helenr

TA貢獻1780條經(jīng)驗 獲得超4個贊

像這樣的東西應該使用 switchMap 運算符


this.projectService.addProject(newProject).pipe(

  tap(data => newProjectFromServer = data),

  switchMap(() => {

    return this.projectService.addEmployeesToProject(

    newProjectFromServer.id, 

    newProject.assignedEmployees

  )}

).subscribe((secondResult) => {

   this.afterSubmit()

});

我希望它有所幫助。


有關 switchMap 運算符的研究鏈接:


https://www.learnrxjs.io/learn-rxjs/operators/transformation/switchmap


查看完整回答
反對 回復 2022-12-18
?
Smart貓小萌

TA貢獻1911條經(jīng)驗 獲得超7個贊

您可以使用concatMap、switchMap、mergeMap。建議使用concatMap,因為它可以確保 HTTP 調(diào)用的順序執(zhí)行。


this.projectService.addProject(newProject).pipe(

  concatMap((newProjectFromServer) => {            

    this.projectService.addEmployeesToProject(

       newProjectFromServer.id, 

       newProject.assignedEmployees

    )}

).subscribe((secondResult) => {

   this.afterSubmit()

});


查看完整回答
反對 回復 2022-12-18
?
蝴蝶刀刀

TA貢獻1801條經(jīng)驗 獲得超8個贊

我認為更好的方法是將其轉換為承諾:


public async myFunc(): Promise<void> {

const newProjectFromServer = await this.projectService.addProject(newProject).toPromise()


await this.projectService

  .addEmployeesToProject(

    newProjectFromServer.id,

    newProject.assignedEmployees

   ).toPromise();

this.afterSubmit();

}


查看完整回答
反對 回復 2022-12-18
  • 3 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號