将异步更新累积到单个observable中

时间:2018-04-26 16:16:28

标签: typescript asynchronous rxjs observable

在我的组件中,我有可观察的项目数组

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 :(得分:0)

当您想要组合现有的可观察量时,您可以使用一系列不同的运算符,例如。 concat,merge,combineLatest,withLatest from。通常最好使用这些将两个可观察量组合成一个,而不是使用主题。

在你给出的例子中,你想要将一个observable附加到另一个obat运算符是明显的选择,例如。

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运算符工作,但组合的observable需要完成。如果它们没有完成,那么您可以尝试合并运算符,但在这种情况下,您无法保证它们的组合顺序。