可观察: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())
)
}
我想编写一个函数,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())
)
}