gpt4 book ai didi

javascript - CombineLatest 第一个事件未触发

转载 作者:搜寻专家 更新时间:2023-11-01 04:53:31 25 4
gpt4 key购买 nike

我想知道我的应用程序何时离线并恢复在线。我在 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)

关于javascript - CombineLatest 第一个事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47550911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com