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'));
以 this jsbin 为例,通过 devtools 切换你的网络,你会看到第一次它不会记录 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)
。
我想知道我的应用程序何时脱机并重新联机。我在 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'));
以 this jsbin 为例,通过 devtools 切换你的网络,你会看到第一次它不会记录 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)
。