首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2更新可观测到的

角2更新可观测到的
EN

Stack Overflow用户
提问于 2016-06-25 12:11:11
回答 1查看 549关注 0票数 1

为了创建一个可以观察到的方法,每5秒运行一次API调用并检查新的用户活动,我使用了以下方法:

代码语言:javascript
复制
getLastActivity()
{
    return Observable.interval(5000).startWith(0)
        .switchMap(() => this.http.get('user-activity'))
        .map(res => res.json());
}

我在显示活动的组件中订阅它,这是我的侧栏(所有页面)。

代码语言:javascript
复制
let activitySub = this._myService.getLastActivity()
        .subscribe( data => this.activities = data.user_activities);

有时,用户正在进行一个活动,我希望在sidenav中显示新添加的活动,而不是等待1-5秒(可观察的时间)。

使用对象push手动向activity数组添加操作不是一个选项,因为这些操作是插入服务器端的。

当我试图逃跑时:

this.getLastActivity.subscribe(() =>{});

我犯了一个错误,因为我已经订阅了这个可观察到的。

我的问题是:如何执行可观察的API调用,即使可观察的下一次运行所剩的时间还没有过去?

EN

回答 1

Stack Overflow用户

发布于 2016-06-26 11:33:10

您需要合并两个可观察的:“间隔”可观测和“用户活动”可观测。

代码语言:javascript
复制
let intervalOb = Observable.interval(5000).startWith(0);
let useractivityOb = ... // you need to convert user activity to an observable
Observable.merge(intervalOb, useractivityOb)
    .switchMap(() => this.http.get('user-activity'))
    .map(res => res.json());

或者你可以用一个主题:

代码语言:javascript
复制
let subject = new Subject();
subject.switchMap(() => this.http.get('user-activity'))
    .map(res => res.json());
Observable.interval(5000).startWith(0).subscribe(subject);
// and now everytime there is a user activity, call subject.next()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38028400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档