3

コンテキスト: JSON ツリーを使用して迅速なコードを生成するために、事前注文形式でツリーをトラバースし、すべてのリーフ ノードに到達して、ツリーを効果的に配列にフラット化します。

説明: Rx.Observable.generate() を使用して配列要素から監視可能なストリームを作成していますが、フィルタリングすると奇妙な結果が得られます。以下に、煮詰めた例を示します。

例:

var Rx = require('/usr/local/lib/node_modules/rx') // 4.0.7

// source 1,3,5,7,9 (WAT)
var source = Rx.Observable.generate(
    0,
    function (x) { return x < 10; },
    function (x) { return x + 1; },
    function (x) { return x; }
)

// filter & merge
var a = source.filter(x => x % 2 == 0)
var b = source.filter(x => x % 2 != 0)
var source = a.merge(b)

// subscribe & output
var subscription = source.subscribe(
    x => console.log(x)
)

質問:出力結果が期待どおり 0,1,2,3,4,5,6,7,8,9 ではなく、1,3,5,7,9 になるのはなぜですか?

マージを適用する方法は問題ではないようです... 逆にすると、出力 0,2,4,6,8 も得られます。

編集、npm インストール & ノード バージョン user3743222: フィードバックをお寄せいただきありがとうございます。プロジェクトに関する情報は次のとおりです。

$ npm install

chai@3.4.1 node_modules/chai
├── assertion-error@1.0.1
├── type-detect@1.0.0
└── deep-eql@0.1.3 (type-detect@0.1.1)

moment@2.11.1 node_modules/moment

mocha@2.3.4 node_modules/mocha
├── escape-string-regexp@1.0.2
├── diff@1.4.0
├── commander@2.3.0
├── supports-color@1.2.0
├── growl@1.8.1
├── debug@2.2.0 (ms@0.7.1)
├── jade@0.26.3 (commander@0.6.1, mkdirp@0.3.0)
├── mkdirp@0.5.0 (minimist@0.0.8)
└── glob@3.2.3 (inherits@2.0.1, graceful-fs@2.0.3, minimatch@0.2.14)

rx@4.0.7 node_modules/rx


$ node --version

v4.2.1
4

3 に答える 3

0

コメントで述べたように、RxjsV4 はオペレーターに対して Rxjsv2 とは異なる動作を示すようgenerateです。

ターンアラウンド:

  • バージョンをダウングレードする
  • deferソース Cf を再起動するために使用します。http://jsfiddle.net/fz3LL7e5/1/この場合はうまくいきますが、必ずしもすべての場合ではありません。
  • 実際にはshare、ダウンストリームのオブザーバブルに同じ値を正しく表示させたいので、使用したいと思いますか? 生成を再開する代わりに。参照。http://jsfiddle.net/fz3LL7e5/2/これは期待どおりに動作します。

ホットとコールドの説明はこちら (公式ドキュメント)こちら (図解されたデータフロー)

于 2016-01-19T15:09:54.233 に答える
0

イベントのストリームを作成するさまざまな方法を試して、いじりました

from() に渡すオブジェクトに public lengthプロパティが必要な from 配列のようなオプションを使用するのが好きです。これがインデックスされているためかどうかはわかりません。

var E = Rx.Observable.from(arrayLike,
    function (_, i) {
        return i
    })

ここでの作業を示します: http://jsfiddle.net/th3caaaz/

于 2016-01-22T12:02:53.810 に答える