Die*_*erg 4 javascript rxjs rxjs5
我想知道我的应用程序何时脱机并重新联机.我注册了以下活动rxjs:
const online = Rx.Observable.fromEvent(window, 'online');
const offline = Rx.Observable.fromEvent(window, 'offline');
const source = Rx.Observable.combineLatest(online, offline).map(() => navigator.onLine);
source.subscribe(result => {
console.log('I\'m online: ' + (result ? 'jup' : 'nope'));
});
Run Code Online (Sandbox Code Playgroud)
但是,我第一次离线时事件并没有触发,如果我添加常规addEventListener事件,我看到他们被触发正常:
window.addEventListener('online', () => console.log('online triggered'));
window.addEventListener('offline', () => console.log('offline triggered'));
Run Code Online (Sandbox Code Playgroud)
以这个jsbin为例,通过devtools切换你的netwerk,你会看到它第一次不会记录I'm online: ....
mar*_*tin 13
在combineLatest操作者需要的所有源观测量发射的至少一个值.
对您而言,这意味着您应该初始化每个流,然后只是听取更改:
const source = Rx.Observable.combineLatest(
online.startWith(null),
offline.startWith(null),
)
.skip(1)
.map(() => navigator.onLine)
Run Code Online (Sandbox Code Playgroud)
也许你甚至不需要使用skip(1)如果你想知道的初始状态navigator.onLine.