可观察:Return Promise 的结果,直到取消订阅

Observable: Return the result of a Promise until unsubscribed

我想编写一个函数,return是一个要订阅的 Observable。 Observable 应该每三秒发出一次 Promise 的结果。

以下函数 return 是 Promise,但我希望它成为 return Promise 的结果:

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

我正在使用 Angular 和 TypeScript。

你可以试试下面,

   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);
           })
        });
   }

希望对您有所帮助!!

你需要的是 switchMap,它将你的间隔映射到另一个 Observable 的输出。不知道怎么形容才好。

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