2017-09-15 111 views
0

我在Observable中有一個GET請求。我想將它的結果發送給Observer。不幸的是,它發送未定義的值,因爲它甚至在GET執行完成之前就與觀察者通信 - 這就是問題所在。Rxjs Observable發送undefined - 如何避免它

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

它有點難以理解你想用這段代碼實現什麼。如果你可以指定你的要求,我可以幫助解決這個問題。 –

+0

謝謝,編輯盡我所能。 –

回答

1

你可以做這樣的事情

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

從消費方面,你可以做這樣的事情

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

您也可以啓動它與做的副作用在這種情況下,代碼可以更具可讀性和線性。

let outputStream=new Subject() 

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

outputStream.subscribe()