【问题标题】:rxjs merging http data with websocket updaterxjs 将 http 数据与 websocket 更新合并
【发布时间】:2018-09-21 09:38:11
【问题描述】:

我有几个通过 api 调用获得的数据数组

    protected ngUnsubscribe: Subject<void> = new Subject<void>();

    const users$ = this.userApi
        .find<User>()
        .takeUntil(this.ngUnsubscribe)
        .share();

    this.active$ = users$.map(users =>
        users.filter(user => user.status === 'active')
    );

    this.archived$ = users$.map(users =>
        users.filter(user => user.status === 'inactive')
    );

然后不同会话中的另一个用户更新用户记录,将其从活动更改为非活动。

服务器使用 websockets 通知我的会话这个更新的用户。

这就是我现在卡住的地方...如何修改 $active$archive 可观察对象以反映数据的这种变化?

【问题讨论】:

  • this.userApi.find&lt;User&gt;() 是否调用了 http 端点,可能是通过 Angular http 客户端?

标签: rxjs


【解决方案1】:

所以我通过使用以下方法来实现它:

const data = await this.userApi
        .find<User>()
        .takeUntil(this.ngUnsubscribe)
        .share()
        .toPromise();

    const data$ = new BehaviorSubject<User[]>(data);

    this.active$ = data$.map(users => {
        return users.filter(user => user.status === 'active');
    });

    this.archived$ = data$.map(users => {
        return users.filter(user => user.status !== 'active');
    });

现在,每当我从 websocket 获得更新/删除/创建时,我都会相应地操作数据数组并执行

data$.next(data)

获取更新数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 2016-10-19
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多