私のAngularアプリでは、私は通知の作業をしています。最新のユーザーの通知を呼び出すREST APIがあります。このAPIを数分で呼び出す必要があります。実際にユーザーがリアルタイムで通知を受け取ることは重要ではないため(おそらくそれほど速くは表示されません)しかし、クライアント側に通知をリフレッシュするアイデアは次です:間隔でRxJSポーリングを手動で呼び出す場合
- 開始ユーザがログイン通知をリフレッシュすると - ユーザーがアプリを離れる場合は、ここで数分
- にAPIをリフレッシュ開始する最初のマニュアルコールがあります開いているか、アプリをナビゲートしているだけです。その後、タイマーを変更せずに残りの時間を待ちます。
- 通知に関するアクションを実行できるサブページを開き、通知をリフレッシュしてリセットすると、
の
- 更新通知ログアウト
まで、私はすでに述べたプロシージャのコードを働いてきたが、私はそれは私が必要なもののために正しいだと何とかわかりませんよ。ここで呼び出しを実行するためのコードである(手動チェックのためには、ちょうど件名があって、そこに観察へのサブスクリプションでチェックストップ用 - 以下、実際に分離されているコードは、しかし、こちらの読みやすさの一つの場所にある):
// Subject for manual triggering
this.checkFeed = new Subject<void>();
// Call for refresh in own method
this.checkFeed.next();
// Waiting for manual refresh or triggering it on some interval after it was last triggered
this.feedSub = this.checkFeed.asObservable()
.switchMap(() => Observable.timer(0, this.interval))
.mergeMap(() => this.fetchChanges())
.distinctUntilChanged(this.compareFeed)
.subscribe(res => this.notify(res));
// Unsubscription when logging out
if (this.feedSub) this.feedSub.unsubscribe();
私が一番不確かな部分は.switchMap(() => Observable.timer(0, this.interval))
です。すぐに開始するには0
が必要です(これは大丈夫ですが、まだまったく正しいとは限りません)。だから私が説明したことを達成するためのより良い方法はありますか?
別の観測値から通知を確認する方法 - 私はどの演算子を使うべきですか?私が述べたように、私は、件名の次の自身の方法でこのように呼んでいます
refreshFeed(): void {
this.checkFeed.next();
}
を(通知をリフレッシュする必要があるアクション)を実行するいくつかの他の観察可能があるときに私はこの1つを呼び出す必要があります。 void
メソッドを呼び出す正しい方法は、他の観測対象にAPIからの応答がある場合です。私は次のようなことを考えていました。
someActionThatCanChangeNotifications(): Observable<any> {
return this.api.get('path/to/endpoint')
.do(() => this.feedService.refreshFeed());
}
これはいいですか、それとも良い方法ですか?
ありがとうございました!
インターバルを5秒(プランナー内)に設定してからインターバルの途中でクリックすると(イベントが発生するまで2〜3秒が残っているため)、オブザーバブルのマージはうまくいかない5秒にリセットされるのではなく、残りの時間(前述のように2または3秒)後に放出されます。 – user1257255