簡體   English   中英

angular2 2異步調用

[英]angular2 2 async call

Angular2,打字稿

我有一個組件,一次從服務器顯示1個對象。

單擊按鈕后,表單會對對象執行某些操作,然后將數據發送到服務器。 立即在下一行中,得到下一個對象。

this.rawS.updateTags({......}); //Update object
this.candidateC.footerNavigateTo(.....);//Get next object

但是在競爭條件下,要獲取下一個對象的ajax在updateTags ajax到達服務器之前已到達服務器。

更新代碼的代碼為

  updateTags(rawCandidate) {
    this.baseAjaxService.doPost(this.baseUrl + 'tags/update', rawCandidate)
      .subscribe(data => {
        console.log(data);
      });
  }

doPost的代碼是

doPost(url, inputParamJSON){
    let httpResponse  = this.http
      .post(url, inputParamJSON, this.options)
      .map(this.extractData)
      .catch(this.handleAjaxError);
    return httpResponse;
}

“ continue_screening”的路由具有一個路由解析器,該路由解析器會帶來下一個對象。

我如何確保footerNavigateTo()僅在updateTags完成其整個周期之后運行?

如果您希望根據調用updateTags(rawCandidate)函數的位置而具有不同的行為,那么我提出以下解決方案:

  updateTags(rawCandidate, action) {
    this.baseAjaxService.doPost(this.baseUrl + 'tags/update', rawCandidate)
      .subscribe(
       data => {
        action(data);

      },
      error => {
          console.log("error"); //handle error here
      });
  }

然后,您可以像下面這樣調用函數:

updateTags(rawCandidate, function(data){
   console.log(data);
   this.candidateC.footerNavigateTo(.....);//here you can use data
});

在這里要實現的是將兩個http調用鏈接起來,使它們以某種方式依賴。 在Angular 1.X中,可以使用promise來完成,但是使用AngularJS 2可以使用flatMap來實現。

請參閱“ 相關調用”部分中的此鏈接http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

PS:如本文所述( 在Angular 2中組合諾言 ),您也可以使用toPromise()將Observable(即,異步http調用)轉換為Promise,如果您對此更加熟悉的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM