Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:触发可观察到的间隔_Javascript_Angular_Rxjs_Observable - Fatal编程技术网

Javascript 角度:触发可观察到的间隔

Javascript 角度:触发可观察到的间隔,javascript,angular,rxjs,observable,Javascript,Angular,Rxjs,Observable,我如何触发一个可观察的间隔,在定义的间隔之外执行其操作,但保持间隔按定义运行 示例: 间隔是10秒。我不仅喜欢在休息时间打电话给doit,如果有活动发生,也喜欢打电话给doit——比如说,点击按钮 当然我可以在按钮处理程序中调用doit,但是有没有一种方法可以使用obervable(例如,某种obs.trigger())来实现呢 谢谢 我认为这是不可能的,因为你根据时间间隔创建了可观察的 但是如果你想观察到,你可以这样创造它 <button (click)="obs.next($event

我如何触发一个可观察的间隔,在定义的间隔之外执行其操作,但保持间隔按定义运行

示例:

间隔是10秒。我不仅喜欢在休息时间打电话给doit,如果有活动发生,也喜欢打电话给doit——比如说,点击按钮

当然我可以在按钮处理程序中调用doit,但是有没有一种方法可以使用obervable(例如,某种obs.trigger())来实现呢


谢谢

我认为这是不可能的,因为你根据时间间隔创建了可观察的

但是如果你想观察到,你可以这样创造它

<button (click)="obs.next($event)">

private obs = new Subject();
public obs$ = this.obs.asObservable();
first.concat(second).subscribe(res => console.log(res));
所以我建议创建两个oberservable,然后将它们合并。您已经有了一个按钮,并为按钮单击创建了多个按钮,而不是将它们合并



private obsButtonClick=新主题();
public obs$=this.obsButtonClick.asObservable();
恩戈尼尼特()
{
this.obs=可观测的间隔(10*1000)
.startWith(0);
this.obs.concat(obsButtonClick).subscribe((n)=>
{
doit();
});
}

我认为这是不可能的,因为您根据时间间隔创建了可观察的

但是如果你想观察到,你可以这样创造它

<button (click)="obs.next($event)">

private obs = new Subject();
public obs$ = this.obs.asObservable();
first.concat(second).subscribe(res => console.log(res));
所以我建议创建两个oberservable,然后将它们合并。您已经有了一个按钮,并为按钮单击创建了多个按钮,而不是将它们合并



private obsButtonClick=新主题();
public obs$=this.obsButtonClick.asObservable();
恩戈尼尼特()
{
this.obs=可观测的间隔(10*1000)
.startWith(0);
this.obs.concat(obsButtonClick).subscribe((n)=>
{
doit();
});
}
您可以使用运算符组合两个观察值。您的间隔加上fromEvent click可观察

Observable.merge(
    Observable.interval(10 * 1000),
    Observable.fromEvent(this.myButton.nativeElement, 'click')
)
.startWith(0)
.subscribe(...)
这是一个演示。

您可以使用操作符组合两个观察值。您的间隔加上fromEvent click可观察

Observable.merge(
    Observable.interval(10 * 1000),
    Observable.fromEvent(this.myButton.nativeElement, 'click')
)
.startWith(0)
.subscribe(...)

这是一个演示程序。

我看我是否只是执行一下

clicked ()
{
  this.obs.next ();
}
正如我所预料的那样

是否有我看不到的负面影响?
因为你的答案稍微复杂一点,恐怕我漏掉了什么?

我看我是不是只是在表演

clicked ()
{
  this.obs.next ();
}
正如我所预料的那样

是否有我看不到的负面影响?
因为您的答案稍微复杂一些,恐怕我遗漏了什么?

您希望在触发手动事件时重置间隔吗?不,但如果它也正常。您希望在触发手动事件时重置间隔吗?不,但如果它也正常。所有这些答案在技术上都有效。我认为这归结于简洁。对我来说,您最初的解决方案是如何实现该功能。这是最清楚的。在interval do this上,单击do this。我认为主题方法对于用例来说是过分的。merge+fromEvent方法避免了角度事件处理。对于obs.next方法,我相信我以前没有见过有人访问订阅的下一种方法。不确定这背后的原因。所有这些答案在技术上都有效。我认为这归结于简洁。对我来说,您最初的解决方案是如何实现该功能。这是最清楚的。在interval do this上,单击do this。我认为主题方法对于用例来说是过分的。merge+fromEvent方法避免了角度事件处理。对于obs.next方法,我相信我以前没有见过有人访问订阅的下一种方法。不知道这背后的原因。