В основном у меня есть две подписки, которые время от времени запускают события.
Первый довольно простой, он загружает и отображает некоторые данные:
observableOne$.switchMap(event => {
return loadData(event);
}).subscribe(data => {
displayData(data);
});
Второе преобразование отображает данные, и преобразование должно выполняться только один раз:
observableTwo$.subscribe(event => {
transformDisplayedData(event);
});
Проблема, с которой я столкнулся, заключается в том, что если второе событие запускается сразу после первого, преобразование теряется. И я не могу подать заявку повторно, это одноразовое действие.
Есть ли способ отложить преобразование, если observableOne$
запущен недавно?
Временная последовательность будет выглядеть так:
One : -a----------a----->
Two : -----b------b----->
Display : ---a----------a---> // lag is due to async data loading
Transform: -----b--------b--->
ИЗМЕНИТЬ
Я создал скрипку с демонстрацией. Фактическая временная последовательность может быть записана так:
PageClick : -x----------x----->
HighlightClick : -----x------x----->
DataRender : ---x----------x--->
DataHighlight : -----x------x----->
Когда PageClick и HighlightClick объединяются, данные выделяются и отображаются через секунду. Но я хочу отложить выделение, отсюда желаемая временная последовательность:
PageClick : -x----------x----->
HighlightClick : -----x------x----->
DataRender : ---x----------x--->
DataHighlight : -----x--------x--->
observableTwo$
, если вы знаете, что он срабатывает сразу послеobservableOne$
, а вы знаете, что этого не должно быть? Существуют такие операторы, какthrottle()
илиdebounce()
, но трудно дать вам совет, если неочевидно, что делает ваш код. - person martin   schedule 03.11.2016transformDisplayedData(event);
прямо передdisplayData(data);
? - person martin   schedule 03.11.2016subscribe
дляobservableOne$
? Потому что трансформация контролируется вторым событием. И если первое событие происходит без второго, то преобразование не требуется. - person Sergey Sokolov   schedule 03.11.2016