可观察:返回Promise的结果直到取消订阅

时间:2016-08-30 14:51:41

标签: angular typescript observable

我想编写一个返回Observable订阅的函数。 Observable应该每隔三秒发出一次Promise的结果。

以下函数返回Promise,但我希望它返回Promise的结果:

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

我正在使用Angular和TypeScript。

2 个答案:

答案 0 :(得分: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);
           })
        });
   }

希望这会有所帮助!!

答案 1 :(得分:1)

您需要的是switchMap,它将您的间隔映射到另一个Observable的输出。我不知道如何更好地描述它。

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