накапливать асинхронные обновления в одной наблюдаемой - PullRequest
0 голосов
/ 26 апреля 2018

В моем компоненте у меня есть наблюдаемый массив элементов

items: Observable<Item[]>;

Также в моем сервисе ItemProvider у меня есть метод, который возвращает новые обновления.

ItemProvider.getUpdates() : Observable<Item[]> {...};

Я бы хотел добавить результат getUpdates() в items.

Первый товар пуст

items = []

method getUpdates() is called and returns array [item1, item2, item3]

we add these items into items array
items = [item1, item2, item3]

method getUpdates() is called and returns array [item4, item5]

we add these items into items array
items = [item1, item2, item3, item4, item5]

1 Ответ

0 голосов
/ 28 апреля 2018

Когда вы хотите объединить существующие наблюдаемые объекты, вы можете использовать ряд различных операторов, например. concat, merge, ОбъединитьПоследний, сПоследний из. Обычно лучше использовать их, чтобы объединить две наблюдаемые, а не использовать предметы.

В приведенном вами примере, где вы хотите добавить одну наблюдаемую к другой, оператор concat является очевидным вариантом, например.

let items = Observable.from([0]);

const updates = Observable.from([1, 2, 3]);

items = items.pipe(concat(updates));

items.subscribe(item => console.log(item)) // 0,1,2,3

const updates2 = Observable.from([4, 5, 6]);

items = items.pipe(concat(updates2));

items.subscribe(item => console.log(item)) // 0,1,2,3,4,5,6

Чтобы оператор concat работал, хотя объединяемые наблюдаемые должны быть завершены. Если они не завершены, вы можете попробовать оператор слияния, но в этом случае вы не можете гарантировать порядок, в котором они объединены.

...