2016-10-28 2 views
1

Я пытаюсь пропустить элементы из потока до n секунд, а затем взять последний элемент, который был передан в потоке. Это то, что я до сих пор:Только взять последний элемент после X секунд

const delayedState$ = state$.delay(1000); 
 
state$.buffer(
 
    delayedState$ 
 
).filter(
 
    (buffer) => buffer && buffer.length > 0 
 
).publishReplay(1).refCount().map(
 
    (buffer) => buffer.slice(-1).pop() 
 
).subscribe((state) => { 
 
    saveState({ 
 
    buttonCount: state.buttonCount 
 
    }); 
 
})

Но это, кажется, грязный, и, кажется, не работает, когда поток имеет много изменений в очень короткой последовательности. Я в основном стараюсь следовать этому: https://github.com/tayiorbeii/egghead.io_idiomatic_redux_course_notes/blob/master/03-Persisting_the_State_to_the_Local_Storage.md

Мое ограничение; он имеет, последний элемент после n секунд, не первый элемент, а затем подождите n секунд.

ответ

1

В этой демонстрации source Наблюдаемый излучает 10 значений с задержкой 1 с между ними.

Все значения не игнорируются, пока внутренний Наблюдаемое задерживается на 5 секунд выдает значение, а затем только последние значения передается абоненту (последнее значение 9, потому что interval() рассчитывает значение от 0):

let source = Observable.interval(1000).take(10); 

source.skipUntil(Observable.of(true).delay(5000)) 
    .takeLast(1) 
    .subscribe(val => console.log(val)); 

См. Демо-версию: http://plnkr.co/edit/zklJWnnKzHu3smNmr0T2?p=preview

Смежные вопросы