繁体   English   中英

CombineLatest第一个事件没有开火

[英]CombineLatest first event not firing

我想知道我的应用程序何时脱机并重新联机。 我在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'));
});

但是,当我第一次离线时,事件不会被触发,如果我添加常规的addEventListener事件,我看到它们被触发正常:

window.addEventListener('online', () => console.log('online triggered'));
window.addEventListener('offline', () => console.log('offline triggered'));

这个jsbin为例,通过devtools切换你的netwerk,你会看到它第一次不能登录I'm online: ...

combineLatest运算符要求所有源Observable发出至少一个值。

对您而言,这意味着您应该初始化每个流,然后只是听取更改:

const source = Rx.Observable.combineLatest(
    online.startWith(null),
    offline.startWith(null),
  )
  .skip(1)
  .map(() => navigator.onLine)

如果你想知道navigator.onLine的初始状态,你甚至可能不需要使用skip(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM