問題タブ [rxjs5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1124 参照

javascript - RXJS を使用して関数呼び出しを動的に連鎖させる方法は?

最初の呼び出しで要求の結果をキャッシュし、その後の呼び出しのためにキャッシュされた値を読み取る必要があります。

その目標を達成するために、私は約束を使用しており、それらを連鎖しています。私は実用的なソリューションを持っていますが、Promises ではなく RxJS のオブザーバブルに変換したいと考えています。

これが私の実用的なソリューションです:

この plunkr でテストできます: https://plnkr.co/edit/j1pm2GeQf6oZwRvbUsXJ?p=preview

RxJS 5 ベータ版で同じことを達成するにはどうすればよいですか?

アップデート

Bergi のコメントに従って、実際のケースに近づけるために plunkr とコードを更新しました。

0 投票する
2 に答える
227 参照

typescript - RxJS Observable を使用して DIV を選択する方法は?

Angular2を使用しています。

今、私はDIVアイテムを選択するこの方法を知っています:

そのアイテムを選択するRxJS Observableの方法はありますitem.style.top = '10px';か? ありがとう

0 投票する
1 に答える
814 参照

javascript - 再接続で shareReplay を実現するにはどうすればよいですか?

次のコードでは、1 つの値を生成してから完了する単純なオブザーバブルを作成します。次に、最後のアイテムを再生し、3 回サブスクライブすることを共有します。1 回目は直後、2 回目は値が生成される前、3 回目は値が生成されてオブザーバブルが完了した後です。

これをjsbinで実行できます

これにより、次の大理石図が得られます

しかし、私は期待します

誰かが最初の動作をしたい理由は理解できますが、私の理由は、この例とは異なり、数値を返す場合とは異なり、データベース接続など、サブスクライブ解除動作の影響を受けやすいオブジェクトを返す可能性があるからです。上記のマーブル ダイアグラムがデータベース接続を表している場合、dispose メソッドで を呼び出しますdb.close()。3 番目のサブスクリプションでは、解放されたデータベース ハンドラーを値として受け取っているため、例外が発生します。(2 番目のサブスクリプションが終了すると refCount = 0 になり、ソースが破棄されるため)。

また、この例のもう 1 つの奇妙な点は、最初の値で解決され、その直後に完了し、ソースを 2 回サブスクライブしていることです (複製された「Creating observable」でわかるように)。

このgithubの問題がこれについて話していることは知っていますが、欠けているのは次のとおりです。

ソースオブザーバブルが完了していない場合に最後のアイテムを再生できる共有オブザーバブルをどのように達成できますか (refCount = 0)、オブザーバブルを再作成します。

RxJs5 では、share メソッドが問題の再接続部分を解決すると思いますが、共有部分は解決しません。

RxJs4では私は無知です

可能であれば、既存の演算子またはサブジェクトを使用してこれを解決したいと考えています。私の直感では、そのようなロジックを使用して別のサブジェクトを作成する必要があることがわかりますが、まだそこまで進んでいません。

0 投票する
3 に答える
16228 参照

angular - サーバーから送信されたイベントを処理するために RxJ と Angular 2 を使用する

angular 2 /RxJsアプリでサーバー送信イベントの値を表示しようとしています。

バックエンドは、サーバー送信イベントを通じて、個々の文字列を定期的にクライアントに送信します。

angular 2/RxJs 側で取得した値を処理する方法がわかりません。

これが私のクライアントです(ngコンポーネント):

バックエンド メソッドは次のとおりです (RxJava を使用します)。

リクエストでアプリがハングアップし、ページに何も表示されないことに気付きました。

map メソッドの使用に問題があると思われます.map(this.extractData)

着信文字列を配列に追加し、その配列をテンプレートに表示して、文字列が着信すると更新されるようにしたいと思います。

誰でも助けてもらえますか?

編集:これが実用的な解決策です(以下のThierryの回答に感謝します):

0 投票する
2 に答える
14003 参照

typescript - (サーバー送信) EventSource から RxJS Observable を作成する

EventSource (サーバー送信イベント) から RxJs Observable を作成したいと思います。

私は次のことを試しました:

しかし、次の例外が発生します。

完全を期すために、ここに私の index.html の内容を示します。

誰か助けてくれませんか?

編集 1 : Yurzui のアドバイスに従って、コードを次のように変更しました。

次のように、コンソールに最初のメッセージを記録します。

ここで、変数をコンソールに記録する代わりにx、次のように次のメソッドに渡します。

サーバーが送信したイベントはクライアントによって取得されます (Chrome 開発ツールで確認できます) が、文字列の配列が入力されていないことを示すテンプレートには何も表示されません...

ちなみに、JSON.parse(x.data)エラーが発生していたので削除する必要がありました。

0 投票する
1 に答える
870 参照

typescript - rxjs5 - WebSocket コンストラクターが見つかりません

私は何か基本的なことをしようとしていますが、それは完全に私を逃れています。RxJS5Observableでfromrxjx/observable/dom/webSocketを作成しようとしていますが、typescript や es6 モジュールは使用していません。ドキュメントに従ってObservableに適切にパッチを当てることができましたが、件名に期待される文字列を渡そうとすると、エラーが発生します:

no WebSocket constructor can be found[ソース]

TypeScript を掘り下げる時間はまだありませんが、コンストラクターの条件は満たしていると言えます。また、テスト スペックも確認しましたが、同じ関数を使用しています。 Observable.webSocket('ws://host:port');しようとしていますが、それでもエラーが発生します。

私はもう試した:

また、オブジェクトをに渡そうとしましたRx.Observable.webSocket:

commonJS から消費するときに、 rxjs5 を介して利用可能webSocketな Observable の使用方法を理解してくれる人はいますか? (ノード v5.11)

0 投票する
1 に答える
3606 参照

angular - プレーン string[] を Observable に変換しますそれを別のObservableに連結しますRxJS 5 の使用

プレーンstring[]をに変換し、Observable<string[]>それを既存の に連結しようとしていObservable<string[]>ます。

次に、angular2asyncパイプを使用して を表示しObservableます。

これが私のコードです:

誰でも助けてもらえますか?

Observable<string[]>さらに、 EventSource が繰り返し呼び出されるときに、サービス インスタンスが継続的に更新されるようにしたいと考えています。サブスクライブ ロジックは適切な場所にありますか?

編集1:次のようにRxJSconcatオペレーターを使用しようとしました:

angular2 パイプと一緒にasync:

ページには何も表示されません。文字列がコンソールに表示されるだけです...

私が間違っているのは何ですか?

編集2:アプリはこちらのgithubで入手できます

編集 3async : Thierry のアドバイス、特にサブスクライブするためのパイプの使用とスキャン オペレーターの使用を考慮しました。

今残っている唯一の問題は、文字列をテンプレートにレンダリングするためにルーター リンクをクリックする必要があることです... テンプレートは自動的に更新されません...

github のプロジェクトと関連するタグを参照してください: https://github.com/balteo/demo-angular2-rxjs/tree/36864628/536299