2017-01-14 8 views
1

У меня есть наблюдаемое, что прослушивание на событии выбора таблицы, оно также горячее.Почему горячая наблюдаемая перезагрузка

фрагмент кода:

const oTableRowSelect$ = TableOb.rowSelectionChangeEvent$(this.getById("ins-table")); 
    const test = oTableRowSelect$ 
    .do(function() { 
     console.log("resubscribe"); 
    }) 
    .map(function() { 
     return 4; 
    }); 

    test.subscribe(function (o) { 
    console.log("Select1" + o); 
    }); 

    test.subscribe(function (o) { 
    console.log("Select2" + o) 
    }); 

Как вы можете видеть, есть два подписчика, которые слушают на мероприятии. Таким образом, результат должен делиться со всеми подписчиками, что называется эффектом повтора.

Вывод, что у меня есть: enter image description here

Но я ожидал resubscribe выход только один раз. Что я делаю не так?

ответ

1

Хотя ваш oTableRowSelect$ может быть горячим и общим, он только разделяет вверх ту часть, где вы продлить его как-то с дополнительным оператором (ами) (в вашем случае do и map).

В RxJS любое расширение с помощью оператора будет в основном возвращать «новый» поток. Для того, чтобы сделать это "новый" поток горячей/общий вам придется применить оператор, который делает его горячим (share, publish, publishReplay, ЭСТ ...)

const hotBaseStream$ = new Rx.BehaviorSubject("Hi!"); 
 

 
const test = hotBaseStream$ 
 
    // -------- below this line you get a "new" stream, that is not hot any more 
 
    .do(() => console.log("resubscribe")) 
 
    .map(() => 4) 
 
    .publishReplay().refCount(); // remove this part and you will have back your original behavior 
 

 
    test.subscribe(function (o) { 
 
    console.log("Select1 ", o); 
 
    }); 
 

 
    test.subscribe(function (o) { 
 
    console.log("Select2 ", o) 
 
    });
<script src="https://unpkg.com/@reactivex/rxjs/dist/global/Rx.js"></script>

+0

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

+0

Правильно, они получают сообщение в _ «то же время» _ (возможно, несколько секунд на несколько секунд); – olsn

+0

большое спасибо. –

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

  • Нет связанных вопросов^_^