1

Допустим, у меня есть массив следующим образом:Наблюдаемые - предотвратить OnCompleted для массива

const values = [1,2,3]; 

создать наблюдаемый из этого массива следующим образом:

const obs = Rx.Observable.from(values); 

Я подписываюсь так:

obs.subscribe(
    function onNext(result){ 
     console.log('item =>', result); 
    }, 
    function onError(e){ 
     console.error(e.stack || e); 
    }, 
    function onCompleted(){ 
     console.log('observable is completed'); 
    } 
); 

проблема, с которой я столкнулась, заключается в том, что если я вытаскиваю новые элементы в массив следующим образом:

setTimeout(function(){ 
    values.push(4); 
    values.push(5); 
    values.push(6); 
}, 3000); 

эти изделия (4,5,6) не отображаются в обратных вызовах subscribe()!

Итак, мой вопрос в том, как мы можем создать наблюдаемый массив, который может «оставаться открытым», так что если элементы будут перенесены в массив в будущем, что вызовутся обратные вызовы наблюдателя?

Я создал суть этого:

https://gist.github.com/ORESoftware/677ad0a3adf41c04a60829921ba4c4c4

и вот скрипку:

https://jsfiddle.net/mcq40Lmg/

+1

С вашей текущей настройкой наблюдаемый не будет следить за обновлениями массива. Наблюдаемый создается со значениями, которые были изначально. То, что вам нужно, является предметом. –

+0

@AadiDroid благодарит, можете ли вы добавить ответ с более подробной информацией? Я совершенно не знаком с наблюдаемыми –

+0

@AlexanderMills. Я бы предложил сначала изучить основную теорию шаблона наблюдателя и rx. Изучение на примере будет болезненным. – Asti

ответ

1

Если вы ищете возможности для толкнуть значения посредством прямых вызовов, вы необходимо будет использовать Subject<T>.

const values = Rx.Observable.Subject(); 

setTimeout(function(){ 

    values.onNext(4); 
    values.onNext(5); 
    values.onNext(6); 

}, 3000); 

Использование предметов для рутинных операций не считается хорошей практикой и противоречит духу Rx. Субъектами являются, по существу, изменяемые переменные Rx.

В основном вы можете получить любую функциональность, которую хотите от встроенных операторов, или создать новые, которые объединяют существующие.

+0

Это работает для меня, не уверен, почему это делает вещи изменчивыми? –

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