Angular 角度2更新可观测数据

Angular 角度2更新可观测数据,angular,Angular,我使用以下方法创建一个可观察的API调用,每5秒运行一次,并检查新的用户活动: getLastActivity() { return Observable.interval(5000).startWith(0) .switchMap(() => this.http.get('user-activity')) .map(res => res.json()); } 我在显示活动的组件中订阅它,该组件是我的侧栏(所有页面) 有时,用户正在进行活动,

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

getLastActivity()
{
    return Observable.interval(5000).startWith(0)
        .switchMap(() => this.http.get('user-activity'))
        .map(res => res.json());
}
我在显示活动的组件中订阅它,该组件是我的侧栏(所有页面)

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

使用object
push
手动将操作添加到activity objects数组不是一个选项,因为这些操作是插入服务器端的

当我尝试跑步时:

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

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


我的问题:即使下一次运行的可观察时间尚未过去,我如何执行可观察API调用

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

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());
或者您可以使用主题:

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()

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

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());
或者您可以使用主题:

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()

我没有得到
“//您需要将用户活动转换为可观察的”
。你这是什么意思?它会重置5秒的“冷却时间”吗?(这意味着如果已手动执行observable,它将重新计算5秒)您可以使用第二部分中的主题。不,它不会重置5s计时器。如果您需要在每个
http.get('user-activity')
上重置计时器,请告诉我。虽然我不懂
“//但它会稍微复杂一些。//您需要将用户活动转换为可观察的”
。你这是什么意思?它会重置5秒的“冷却时间”吗?(这意味着如果已手动执行observable,它将重新计算5秒)您可以使用第二部分中的主题。不,它不会重置5s计时器。如果您需要在每个
http.get('user-activity')
上重置计时器,请告诉我。不过,这会有点复杂