我想编写一个返回Observable订阅的函数。 Observable应该每隔三秒发出一次Promise的结果。
以下函数返回Promise,但我希望它返回Promise的结果:
public static getWifiInfos(): Observable<Promise<ConnectionInfo>> {
return Observable
.interval(3000)
.map(() => Hotspot.getConnectionInfo());
}
我正在使用Angular和TypeScript。
答案 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())
)
}