2017-08-29 108 views
0

我需要創建2個http請求(第二個依賴於第一個請求),以將用戶credentiels插入到我的數據庫中。如何在Angular 2中創建2個依賴的http請求

第一個服務獲取用戶密碼(http://localhost:55978/FleetViewDBWebService.asmx/ChekCreds?name=name1&subname=subname1),並檢查用戶是否已經存在,返回'ID'(如果存在)或返回「OK」(如果用戶不存在)。

然後我需要訂閱第一個服務並獲取返回的值。 如果「ok」調用第二個服務(http://localhost:55978/FleetViewDBWebService.asmx/InsertUser?name=name1&subname=subname1&Telephone=334580021
來插入用戶信箱,則返回任何消息 。

我打電話給第一個服務並得到結果,但我不知道如何添加第二個服務。

有任何想法

service.ts

CheckCreds(value: any) { 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    let params = new URLSearchParams(); 



    params.set('name', (value.nom).toString()); 
    params.set('subname', (value.prenom).toString()); 

    return this.http.get(this.checkUri, { 
     search: params, withCredentials: true 
    }) 
     .map(res => { 
      console.log("++++" + res.text()); 


      return JSON.parse(res.text()); 
     }) 
     .catch(this.handleError) 


} 

component.ts

submitForm($ev, value: any) { 
    $ev.preventDefault(); 
    for (let c in this.valForm.controls) { 
     this.valForm.controls[c].markAsTouched(); 
    } 
    if (this.valForm.valid) { 
     this.Service.CheckCreds(value) 
      .subscribe(
      res => { 
       string result=JSON.stringify(res); 
      }, 
      e => { 
       alert(e); 
      }, 
      () => { 
      } 

      ); 

    } 
} 
+0

我試圖做類似的事情,有人幫助我。檢查https://stackoverflow.com/questions/44831278/angular2-subscribe-inside-subscribe – Rama

回答

6

的RxJS方式是使用the switchMap operator等待第一個響應請求在發出第二個請求之前到達。

return this.http.get('url/1') 
    .switchMap(res1 => { 
    // use res1 to further control param of the second call 
    this.http.get('url/2') 
    }) 
    .subscribe(res2 => { 
    //do stuff with the second response 
    }) 

要做到在平行請求(對於該不依賴彼此的請求),使用the forkJoin static operator

return Observable.forkJoin(
    this.http.get('url/1'), 
    this.http.get('url/2'), 
) 
    .subscribe(([res1, res2]) => { 
    // res1 and res2 available after both requests are completed 
    })