私はリアクティブプログラミングにはかなり新しいですが、すでに愛しています。しかし、私の脳をそれに切り替えるのはまだ難しいです。私は、「被験者の使用を避ける」、「不純な機能を避ける」、そしてもちろん「必須コードを避ける」などの推奨事項に従っています。RxJS/ReactiveX適切なモジュールの通信
私が達成するのが難しいのは、1つのモジュールが "アクション" /観測可能と登録し、それに反応することができる単純なクロスモジュール通信です。単純なメッセージバスはおそらく動作しますが、これは避けようとしている主題と命令的なコードスタイルの使用を強制します。第二のモジュールは、それが観測「myAction」を「トリガー」加入した瞬間にそう現在
// some sandbox
class Api {
constructor() {
this.actions = {};
}
registerAction(actionName, action) {
// I guess this part will have to be changed
this.actions[actionName] = action.publishReplay(10).refCount();
//this.actions[actionName].connect();
}
getAction(actionName) {
return this.actions[actionName];
}
}
const api = new Api();
// -------------------------------------------------------------------
// module 1
let myAction = Rx.Observable.create((obs) => {
console.log("EXECUTING");
obs.next("42 " + Date.now());
obs.complete();
});
api.registerAction("myAction", myAction);
let myTrigger = Rx.Observable.interval(1000).take(2);
let executedAction = myTrigger
.flatMap(x => api.getAction("myAction"))
.subscribe(
(x) => { console.log(`executed action: ${x}`); },
(e) => {},
() => { console.log("completed");});
// -------------------------------------------------------------------
// module 2
api.getAction("myAction")
.subscribe(
(x) => { console.log(`SECOND executed action: ${x}`); },
(e) => {},
() => { console.log("SECOND completed");});
:だからここ
は、私が一緒に遊んだ、単純な出発点です。そして実際の生活のシナリオでは、ajaxコールになる可能性があります。モジュール1から「myAction」が正しく呼び出されるまで、すべての加入者を遅延/待機させる方法はありますか?そして、やはり - 被験者を使って簡単に行うことができますが、私は推奨された方法に従ってそれをやろうとしています。
「myAction」は、module1 *から正しく呼び出されましたか?それが完了するまで何を意味するのですか? – martin
はい。完全に動作します –