2017-09-19 1 views
0

Je suis débutant chez Angular et cette question peut être bête ou répétitive, désolé pour cela.Répétez une requête HTTP tant que la condition n'est pas remplie

Mon but est d'envoyer la demande à une API Web aussi longtemps que response.Done = true et ceci est mon code que j'appelle une fonction d'un service à l'événement onInit:

export class FlightListComponent implements OnInit { 
 

 
    flightSearchResult: FlightSearchResult; 
 

 
    constructor(private service: FlightService) { 
 
    } 
 

 
    ngOnInit() { 
 

 
    let guid = Guid.newGuid(); 
 

 
    this.service.getAll(guid).subscribe(response => { 
 

 
     if (response.Done != true) { 
 
     this.serveData(response); 
 
     // this.service.getAll(guid) .... 
 
     } 
 

 
    }); 
 
    }

Dans chaque requête, je reçois également des données dont j'ai besoin pour les fusionner à une variable principale par serveData(). Mais je pense qu'il devrait y avoir une meilleure façon de travailler avec observable dans ce cas que je dois appeler getAll() plusieurs fois tant que Done n'est pas égal à true et event me donner toutes les données à la fin sans fusionner dans chaque requête. Quelques-unes comment Toutes les valeurs de chaque Observable ont fusionné en un seul Observable.

Y a-t-il une solution?

Répondre

1

Cela devrait fonctionner:

ngOnInit() { 
    let guid = Guid.newGuid(); 
    this.getAll(guid);  
} 

getAll(guid: Guid) { 
    this.service.getAll(guid).subscribe(response => { 
     if (response.Done != true) { 
      this.serveData(response); 
      this.getAll(guid); 
     } 
    }); 
} 

Ne sait pas vraiment la logique derrière tout cela, mais vous devriez probablement l'appel imbriqué anti-rebond, car vous risquez de surcharger l'API que vous appelez.

0

Je pense que vous êtes à la recherche de la logique de nouvelle tentative, l'échantillon est dessous-

ngOnInit() {

let guid = Guid.newGuid(); 

this.service.getAll(guid).subscribe(response => { 

    if (response.Done != true) { 
    retryWaitTime = 10; 
    retryCount = 2; 
    counter++; 
    if (counter < retryCount) { 
     $timeout(function() { 
       this.serveData(response); 
       // this.service.getAll(guid) .... 
      , retryWaitTime); 
    } else { 
     counter = 0; 
     //return error response 
    } 

    } 

});