1
我想知道我可以做这样的事情在的await /异步和RxJS打字稿:如何链观测和可无极(异步/等待,RxJS,可观察)
async function bar(): Promise<boolean>{ ... }
function boo(): Observable<any> { ... }
function baz(): Observable<any> {
return Observable
.fromPromise(() => bar())
.map(() => boo())
}
要总结,我有多个baz流,我将在以后链接zip。在每个baz()中,我需要做一些异步检查。 但没有附加内容... Observable.fromPromise按预期工作。嘘不。这就像当我订阅流(zip(baz1(),baz2())),boo永远不会执行。
我错过了什么?这个故事中的最佳做法是什么?
编辑:
这里是代码的第一部分:
syncResource(urlEndpoint: string, storeCollectionKey: string): Observable<any> {
return Observable
.fromPromise(this.shouldSyncResource(urlEndpoint, storeCollectionKey))
.map((shouldUpdateResource) => {
if(!shouldUpdateResource){ return Observable.empty(); }
// here i can get "shouldUpdateResource" value
return this._Remote.get(urlEndpoint, this._getRequestOptions())
.map((response: Response) => response.json())
.map((collection) => {
collection.forEach((item) => {
this._Stores[storeCollectionKey].update(item);
});
});
});
}
这里是第二部分:
Observable.zip(
syncResource('/poultries', 'poultriesStoreKey'),
syncResource('/buildings', 'buildingsStoreKey')
).subscribe(() => console.log('Syncing done'))
你需要传递的承诺'fromPromise',而不是返回一个无极的功能,请参见http:// reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-fromPromise – martin
Thx Martin,但即使当我“强制”.fromPromise(new Promise((resolve,reject)=> resolve( true))) 它不起作用,我可以在任何情况下获得承诺的价值回报 – David
您是否订阅从'baz()'返回的Observable? – martin