2017-09-15 5 views
0

J'ai une demande GET dans Observable. Je veux envoyer le résultat à Observer. Malheureusement, il envoie une valeur indéfinie, car il communique à l'observateur avant même que l'exécution de GET ne se termine - et c'est le problème.Rxjs Observable envoie undefined - comment l'éviter

observer:Observer<any> = { 
    next: objectFromObservable => { SomeActionWith() } 
} 


let outputToObserver; 
    this.http.get(myUrl).map((programs)=>{ 
      const mapped = programs.json() as Program[]; 
     outputToObserver=mapped //here we always have desired object 
      return mapped; 
     }) 
     .subscribe(
     (res)=>{ 
      return res; //here we always have desired object 
     } 
    ) 
    //Here outputToObserver is undefined, so above lines are executed before mapping 
     let observable:Observable<any> = Observable.create(function (obserwator) { 
     observer.next(outputToObserver) 
+0

Il est un peu difficile de comprendre exactement ce que vous voulez réaliser avec ce code. Si vous pouvez spécifier vos besoins, je peux aider à résoudre cela. –

+0

Merci, édité du mieux que je peux. –

Répondre

1

Vous pouvez faire quelque chose comme ça

getDataFromMyUrl() { 
    return this.http.get(myUrl).map((programs)=>{ 
      const mapped = programs.json() as Program[]; 
      return mapped; 
     }) 
} 

Du côté de la consommation que vous pouvez faire quelque chose que vous pouvez également tirer comme ça

var getData = getDataFromMyUrl() 
       .subscribe(res => { 
        // Process the data here.... 
       }); 
0

comme un effet secondaire avec le faire, la le code peut être plus lisible et linéaire dans ce cas.

let outputStream=new Subject() 

this.http.get(myUrl).map((programs)=>programs.json()) 
.do(value=>outputStream.next(value)) 
.subscribe() 

outputStream.subscribe()