有頁面A,當頁面A處于激活狀態(tài)時吓笙,每隔10秒淑玫,去調(diào)用一次API更新數(shù)據(jù),但當離開頁面A時面睛,停止調(diào)用API絮蒿,回到頁面A時,重新執(zhí)行以上操作侮穿。面試官當時提供了三個數(shù)據(jù)流歌径,分別如下:
數(shù)據(jù)流a: 每隔10秒發(fā)射一個數(shù)據(jù)的數(shù)據(jù)流;
數(shù)據(jù)流b: focusin事件的數(shù)據(jù)流亲茅;
數(shù)據(jù)流c: foucusout事件的數(shù)據(jù)流
實現(xiàn)方法如下:
const interval$ = Observable.interval(10000);
const blur$ = Observable.fromEvent(this.testEle.nativeElement, 'focusout').mapTo(false);
const focus$ = Observable.fromEvent(this.testEle.nativeElement, 'focusin').mapTo(true);
Observable.merge(blur$, focus$)
.switchMap(val => val ? interval$ : Observable.empty())
.subscribe(() => {
this.service.getTestData()
.then((res) => {
this.test = res.json();
});
});