2016-12-14 1 views
5

У меня возникли проблемы с производительностью в моем angular2 приложении, потому что у меня есть большой Observable.combineLatest() со многими входами, которые быстро изменяются, и я хочу дребезг обратного вызова вызова:angular2: Как отменить призывы Observable.combineLatest?

myData$ = Observable.combineLatest(
    this.store.let(fromRoot.getFoo), 
    this.store.let(fromRoot.getBar), 
    this.store.let(fromRoot.getFoobar), 
    this.store.let(fromRoot.getBarfoo), 
    (foo, bar, foobar, barfoo) => { 
    ... 
    }); 

Вызова дребезга после факта, например Observable.combineLatest (...). DebounceTime (300) бесполезен, потому что интенсивная задача CPU происходит внутри обратного вызова combLatest, который все еще часто называется.

Я предполагаю, что мне нужно совместить другое Наблюдаемое, но я не уверен, как это сделать, любые идеи?

+0

Что делает 'store.let'? Похоже, это может вызвать функцию, которую она дает, возможно, на таймере? –

+0

Это дает мне возможность наблюдать из магазина ngrx, https://github.com/ngrx/store – arturh

ответ

7

combineLatest метод project функция по существу map оператор. Вы можете перестроить такие вещи:

myData$ = Observable.combineLatest(
    this.store.let(fromRoot.getFoo), 
    this.store.let(fromRoot.getBar), 
    this.store.let(fromRoot.getFoobar), 
    this.store.let(fromRoot.getBarfoo) 
) 
.debounceTime(300) 
.map(([foo, bar, foobar, barfoo]) => { 
    ... 
}); 
Смежные вопросы