私はをRxJSのPromisesチェーンから作成しようとしています。 this questionとの違いは私には未知数の約束があり、すべての約束は前の結果に依存するということです。PromiseのシーケンスをRxJSでRx.Observableに変換する方法は?
基本的には、私は一連のページを持っており、「次のページ」のリンクに接続されています。
私は機能がやりたいことはある:約束<>
- 待ち結果(火observer.onNextを())を提供
- チェック次のページリンク があれば
- ページがあるまで、そのリンクで>
- 繰り返しを次の約束<の作成は
私は次のことを試してみました:
private getPages<T>(firstPromise: PromiseLike<IODataCollectionResult<T>>): Rx.Observable<T> {
let observable = Rx.Observable.create<T>(async obs => {
let page = await firstPromise;
page.value.forEach(v => obs.onNext(v));
while (page['@odata.nextLink']) {
let nextPageUrl = <string>page['@odata.nextLink'];
let nextPagePromise = <PromiseLike<IODataCollectionResult<T>>>this.resource(nextPageUrl).get().$promise;
page = await nextPagePromise;
page.value.forEach(v => obs.onNext(v));
}
obs.onCompleted();
});
return observable;
}
(IODataCollectionResult
は、次のページのURLと.VALUEは、値の配列です '@ odata.nextLink' ODataの結果、である)
問題私は活字体で、それは私にエラーを与えることをコンパイルすることはできませんです:
非同期関数はPromise<void>
を返すので、意味がない可能
Argument of type '(obs: Observer) => Promise' is not assignable to parameter of type '(observer: Observer) => void | Function | IDisposable'.
a void
。
Rx.Observable.create()でasync/awaitを使用できないということですか?どのようにして一連の約束をオブザーバブルにすることができますか?