Angular开发中满足指定条件时如何终止setTimeout定时器
实现方案
首先先修正你原有代码的语法错误:条件判断的写法result["CarStat"=="broken"]是错误的,等价于你在取result[false]的值,永远无法触发你想要的判断逻辑,正确写法为result["CarStat"] == "broken"。
单次延迟任务(setTimeout 场景)
setTimeout执行时会返回一个唯一的数字ID,你只需要把这个ID保存下来,需要终止定时逻辑时调用clearTimeout()传入该ID即可。
修正后的代码如下:
this.http.get(api) .subscribe(result => { // 存储定时器ID const timerId = setTimeout(() => { if(result["CarStat"] == "broken"){ // 清除当前定时器 clearTimeout(timerId) // 直接return即可退出当前定时执行逻辑 return } // 这里写条件不成立时需要执行的逻辑 }, 10000); })
周期轮询任务(setInterval 场景)
如果你实际是需要每隔10秒重复检查状态,应该用setInterval实现轮询,终止逻辑和setTimeout一致:
this.http.get(api) .subscribe(result => { // 存储轮询定时器ID const pollTimer = setInterval(() => { if(result["CarStat"] == "broken"){ // 清除轮询定时器,终止后续所有周期执行 clearInterval(pollTimer) return } // 正常轮询需要执行的逻辑 }, 10000); })
内容的提问来源于stack exchange,提问作者moris62
相关产品推荐
相关产品推荐

