내 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();
}
그래서 다른 관찰 수행이있을 때 (액션 통지가 갱신되어야 할 때) 나는이 하나를 호출해야합니다 내가 언급 한 바와 같이 나는 제목의 자신의 방법에서 다음과 같이에 전화를합니다. void
메서드를 호출하는 올바른 방법은 다른 관찰 가능 함수가 API로부터 응답을 받았을 때입니까? 나는 이런 식으로 생각하고 있었다. someActionThatCanChangeNotifications(): Observable<any> {
return this.api.get('path/to/endpoint')
.do(() => this.feedService.refreshFeed());
}
괜찮 냐, 아니면 더 좋은 방법이 있을까?
미리 도움을 청하십시오!
간격을 5 초 (plunker)로 설정하고 간격의 중간을 클릭하면 (이벤트가 발생할 때까지 2 ~ 3 초가 남아있을 때) 관찰 할 수있는 항목을 병합하는 것이 좋지 않습니다. 5 초로 재설정하지 않고 나머지 시간 (앞서 말한 2 또는 3 초) 후에 방출합니다. – user1257255