2017-09-15 106 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()