2017-10-18 21 views
0

Je ne trouve pas de solution à mon problème, j'explique, en espérant que quelqu'un puisse m'aider. J'ai besoin d'appliquer un service d'actualisation après chaque appel à l'API.Comment récupérer les données seulement si le traitement du sous-criquet est terminé

le problème est que je dois attendre le retour du service de rafraîchissement et de faire un traitement avant de retourner mes données:

this.http.post('/api/ws', json).do(() => { 
     this.http.post('/api/refresh', {}).subscribe(
      (data) => { 
       RefreshService.data.next(Object.assign({}, data)); 
      } 
     ); 
    }).subscribe(data => { 
     console.log('data from /api/ws', data) 
    }) 

J'ai besoin de récupérer les données que si le traitement de subscride est terminée.

Merci pour votre aide :)

+0

'this.http.post()' émet un seul événement, lorsque '(data) => {...}' est exécuté, le traitement ** est ** terminé. –

+0

@ GünterZöchbauer Je dois attendre le service d'actualisation avant de montrer console.log –

+0

Je vois, n'a pas lu le code correctement. 'flatMap' il est alors –

Répondre

1

vous pouvez utiliser flatmap et map pour appeler le RefreshService comme ci-dessous:

this.http.post('/api/ws', json).flatMap((response) => { 
    return this.http.post('/api/refresh', {}).map(
     (data) => { 
      RefreshService.data.next(Object.assign({}, data)); 
      return response; 
     } 
    ) 
}).subscribe(data => { 
    console.log('data from /api/ws', data) 
}) 
+0

Tanks, il manque un retour flatmap, mais à l'abonnement je récupère les données de 'api/refresh' n'est pas celles de 'api/ws' –

+0

vous devrez passer à travers le observable Refresh. Édité. – learner