第二次尝试 clearTimeout 执行失败

2nd Attempt clearTimeout fails to execute

我有一个端点发布请求,要求 IoT 设备发送新的阅读数据。我正在使用 PubNub 平台。

在我第一次尝试时,当我得到成功响应时,我的 clearTimeout 函数正确地取消了计时器并且没有更新状态来显示错误消息。但是,每次我尝试第二次执行请求时,clearTimeout 函数都无法停止计时器。我收到了成功响应,但随后我也收到了超时响应,向用户显示了我的错误消息。

handleCheckSensor(){
  if(CancelTimeout){
    clearTimeout(CancelTimeout)
  }
  this.setState({displayGraphs: false})
  this.setState({message: null, error: null})
  const user = this.state.user[0]
  this.pubnub.subscribe({
    channels: [user.channel],
    withPresence: true,
  })
  const CancelPubNub = () => {
    this.setState({isCheckingSensor: false, error: "your request timed out. It appears device did not respond."})
    this.pubnub.unsubscribe({
      channels: [user.channel],
    })
  }

  const CancelTimeout = setTimeout(CancelPubNub, 15000);


  this.pubnub.getMessage(user.channel, (message) => {
    clearTimeout(CancelTimeout)
    this.setState({message: message, isCheckingSensor: false})

  }) 

... }

由于作用域隔离,您需要在此函数外声明超时 ID CancelTimeout。现在 CancelTimeout 是局部变量,仅在该函数为 运行 时创建。好的地方是组件中的 this 。类似于 this.CancelTimeout.