【发布时间】:2020-12-27 04:04:18
【问题描述】:
这里我有一个疑问,如何在订阅中调用间隔方法并在满足条件后停止它
下面是我的代码
主订阅方法
this.authservice.getdata().subscribe(response => {
console.log(res)
// Polling method
SetInterval(()=>{
this.getInterval();
},5000)
})
间隔法:
getInterval(){
this.authservice.getIntervalData().subscribe(resp => {
console.log(resp)
this.responseStatus = resp
})
}
在响应中它给出了 3 种类型的响应
继续
停止
终止
所以在这里我需要在 Main subscribe 方法中调用 getInterval() ,直到 GetInterval 给我 Proceed 作为响应或直到轮询后 1 分钟我设置了运行间隔,如果满足其中任何一个条件我必须停止轮询。
注意:如果主订阅成功响应,我不需要轮询主订阅方法,那么只有我开始这个轮询
更新: 下面的方法有效,但在这里我需要两件事
-
如何设置变量并将响应存储在其中
-
如果响应来了,我如何根据 res 设置布尔变量
this.content =true 同样明智
因为当我尝试在 switchMap 中设置变量时,它不接受
this.authservice.getdata().pipe( switchMap(resp => timer(0, 5000).pipe( // 需要将此响应存储在全局变量中,以便进一步使用 switchMap(t => this.authservice.getIntervalData().pipe( map(data => [data, t]))) takeWhile(([data, t]) => data !== 'TERMINATE' && t 数据) )) ).subscribe(data => console.log(data))
【问题讨论】:
-
是
getIntervalData的第二个 api 调用,之后您想使用第一个的结果进行另一个调用? -
@RafiHenig 在调用 getdata() 结果后,我将在获取 getInterval 方法的结果后作为 get Interval 方法的参数发送,我将根据条件设置布尔值跨度>
-
@Madpop请看我的更新 -
@RafiHenig 最后一件事在使用间隔(5000)时我们正在调用方法 .getIntervalData 如果在间隔数据中获得响应作为终止并且如果它没有得到终止,则必须停止然后需要每 5 秒间隔 2 分钟,我们可以在方法之外停止这个间隔吗?我的意思是像点击按钮一样?
-
@Madpop请看我的更新
标签: javascript angular rxjs angular-httpclient