Javascript 如何清除API响应中状态更改后的间隔?

Javascript 如何清除API响应中状态更改后的间隔?,javascript,reactjs,setinterval,Javascript,Reactjs,Setinterval,假设我有一个checkStatus()方法,该方法在对端点的响应成功后触发。在这里面有一个setInterval,如下所示: checkStatus() { setInterval(() => { client .query({ query, variables, }) .then(res => { if (res.status) {

假设我有一个
checkStatus()
方法,该方法在对端点的响应成功后触发。在这里面有一个
setInterval
,如下所示:

checkStatus() {
    setInterval(() => {
      client
        .query({
          query,
          variables,
        })
        .then(res => {
          if (res.status) {
            console.log("FINISHED!");
          }
        });
    }, 3000);
}
基本上,我每3秒钟查询一个端点。一旦
res.status
变为
true
,我想清除间隔。组件仍然存在,尚未卸载


如何实现这一点?

基本上,您需要为
setInterval
函数指定一个
值,并将其清除到回调中:

checkStatus() {
    const intervale = setInterval(() => {
      client
        .query({
          query,
          variables,
        })
        .then(res => {
          if (res.status) {
            console.log("FINISHED!");
            clearInterval(intervale)
          }
        });
    }, 3000);
 }

只需清除检查条件中的间隔

例如:

checkStatus() {
  const interval = setInterval(() => {
    client
    .query({
      query,
      variables,
    })
    .then(res => {
      if (res.status) {
        console.log("FINISHED!");
        clearInterval(interval)
      }
    });
  }, 3000);
}

您需要首先存储由setInterval返回的引用,并将其传递给clearInterval以清除它。例如,将引用存储在变量ref-

checkStatus() {
    const ref = setInterval(() => {
      client
        .query({
          query,
          variables,
        })
        .then(res => {
          if (res.status) {
            clearInterval(ref);
            console.log("FINISHED!");
          }
        });
    }, 3000);
}

为间隔分配一个变量,并根据条件清除间隔

this.interval = setInterval(() => {
  client
    .query({
      query,
      variables,
    })
    .then(res => {
      if (res.status) {
        console.log("FINISHED!");
        clearInterval(this.interval)
      }
    });
}, 3000);

checkStatus() {
  this.interval()
}
使用
clearInterval()