如何触发interval-observable在定义的时间间隔之外执行其操作但保持间隔按照定义运行?
示例:
Intervall是10秒。我喜欢不仅在intervall中调用 doit ,而且如果事件发生了 - 请按一下按钮。
当然我可以在按钮处理程序中调用doit但是有一种方法我可以使用obervable(例如 obs.trigger()的那种)吗?
export class MyComponent implements OnInit
{
private obs : any; // the observable instance
ngOnInit ()
{
this.obs = Observable.interval (10 * 1000)
.startWith (0)
.subscribe ((n) =>
{
doit ();
});
}
doit ()
{
// some action
}
clicked ()
{
doit (); // works but I am looking for a way to do it with obs
}
}
谢谢!
答案 0 :(得分:3)
我不认为这是可能的,因为你根据间隔创建了observable。
但是,如果你想要观察,你可以像这样创建它
<button (click)="obs.next($event)">
private obs = new Subject();
public obs$ = this.obs.asObservable();
而不仅仅是像这样组合observable
first.concat(second).subscribe(res => console.log(res));
所以我建议创造两个服从而不是将它们结合起来。你已经拥有了一个并为按钮点击创建了一个,而不是组合它们。
<button (click)="obs.next($event)">
private obsButtonClick = new Subject();
public obs$ = this.obsButtonClick.asObservable();
ngOnInit ()
{
this.obs = Observable.interval (10 * 1000)
.startWith (0);
this.obs.concat(obsButtonClick).subscribe ((n) =>
{
doit ();
});
}
答案 1 :(得分:2)
答案 2 :(得分:-1)
我看是否只是执行
clicked ()
{
this.obs.next ();
}
它按预期工作。
我看不到有负面影响吗? 因为你的答案稍微复杂一点,我害怕错过什么?