【问题标题】:accumulate async updates into single observable将异步更新累积到单个可观察对象中
【发布时间】:2018-10-07 10:22:45
【问题描述】:

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

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]

【问题讨论】:

  • 你试过什么?还是您希望我们为您做这件事?
  • @MikeTung 哦,男孩……不,我没有。我只是没有使用 Rxjs 和打字稿的经验。根据文档,有很多不同的对象我可以使用热/冷的 observables(vanilla、Subject、ReplaySubject、BehaviourSubject)。不知道什么是最好的匹配。

标签: typescript asynchronous rxjs observable


【解决方案1】:

当您想要组合现有的 observables 时,您可以使用一系列不同的运算符,例如。 concat,合并,combineLatest,withLatest from。通常最好使用它们将两个 observable 合并为一个,而不是使用 Subjects。

在您给出的示例中,如果您希望将一个可观察对象附加到另一个对象,则 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 操作符工作,尽管被组合的 observables 需要完成。如果它们没有完成,那么您可以尝试合并运算符,但在这种情况下,您无法保证它们组合的顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多