2017-11-29 4 views
2

私のアプリケーションがいつオフラインになってオンラインに戻ったか知りたい。私は、次のイベントがrxjsに登録していますCombineLatest最初のイベントは起動しない

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')); 
}); 

しかし、私はイベントをオフラインに初めてallthoughトリガされていない、私は定期的にaddEventListenerイベントを追加した場合、私は、彼らは罰金トリガー取得している参照してください。

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

例としてthis jsbinを見て、devtools経由であなたのネットワークを切り替えると、最初にログに記録されないでしょうI'm online: ...

答えて

4

オペレータcombineLatestオペレータは、すべてのソースオブザーバブルに少なくとも1つの値を出力する必要があります。あなたのために

これはあなたが各ストリームを初期化してからちょうど変化に耳を傾ける必要があります意味:

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

たぶん、あなたも、あなたがnavigator.onLineの初期状態を知りたい場合はskip(1)を使用する必要はありません。

+0

私の場合は本当に「スキップ」は必要ありません。 – Dieterg

関連する問題