2017-12-20 8 views
2

たとえば、観測可能なfrom(['a', 'b'])がある場合、[0, 'a'][1, 'b']を放出する観測値を取得する方法はありますか?同期オブザーバブルを列挙する方法は?

私はfrom('a', 'b').pipe(zip(range(0, Number.POSITIVE_INFINITY)))を試してみましたが、これは無限ループを作成します:あなたは、コンソールでRx.Observable.from(['a', 'b']).zip(Rx.Observable.range(0, Number.POSITIVE_INFINITY)).do(console.log).subscribe()をしようとした場合(ヒント:ページhttp://reactivex.io/rxjs/manual/overview.htmlは、Rxはすでに輸入している)、これは、ページが(rangeが無期限の値を推進している)がハングアップする原因となります。私の文脈(IndexedDBとの連携)では、非同期スケジューラーを使用することはできません。とにかく、パフォーマンスの観点からは意味をなさないでしょう。

私はカスタムオペレータ

import { Observable } from 'rxjs/Observable'; 
import { map } from 'rxjs/operators'; 

export const enumerate = <T>(source: Observable<T>) => { 
    let index = 0; 
    return source.pipe(map(source => ({ value: source, index: index++ }))); 
}; 

を作成することによってこの問題を回避働いていたが、私は簡単なソリューションをしないのですか?

from(['a', 'b']).pipe(
    map((value, index) => [ index, value ])) 
); 

それとも、オブジェクトを発するようにしたい場合:それは

答えて

3

多くの事業者は、別のパラメータとしてコールバック関数に渡されるあなたのためindex数え続ける... RxJSがそれで、この落とし穴を持っていることだけで奇妙です:

map((value, index) => ({ index, value })) 
関連する問題