2016-08-30 89 views
1

我無法將我的頭圍繞Observables,我希望你們能幫助我。Observable:返回Promise的結果直到取消訂閱

我想寫一個小函數,它返回一個Observable來訂閱。 Observable應該每三秒返回Promise的結果。

下面的函數返回的承諾,但我想它返回無極結果:

public static getWifiInfos(): Observable<Promise<ConnectionInfo>> { 
     return Observable 
      .interval(3000) 
      .map(() => Hotspot.getConnectionInfo()); 
} 

我AngularJS 2和打字稿工作。

回答

1

你需要的是switchMap,它將你的間隔映射到另一個Observable的輸出。我不知道如何更好地描述它。

public static getWifiInfos(): Observable<ConnectionInfo> { 
    return <Observable<ConnectionInfo>> Observable 
    .interval(3000) 
    .switchMap(() => 
     Observable.fromPromise(Hotspot.getConnectionInfo()) 
    ) 
} 
1

您可以嘗試以下,

private connectionInfoSubject = new Subject<ConnectionInfo>(); 

    connectionInfoObservable = this.connectionInfoSubject.asObservable(); 

    public static getWifiInfos(): Observable<ConnectionInfo>{ 
     Observable 
     .interval(3000) 
     .map(() => { 
      // Assuming Hotspot.getConnectionInfo is a synchronous call     
      this.connectionInfoSubject.next(Hotspot.getConnectionInfo()); 
      // If Hotspot.getConnectionInfo is promise 
      Hotspot.getConnectionInfo().then(result => { 
       this.connectionInfoSubject.next(result); 
      }) 
     }); 
    } 

希望這有助於!