【问题标题】:2nd Attempt clearTimeout fails to execute第二次尝试 clearTimeout 无法执行
【发布时间】:2018-07-25 19:43:10
【问题描述】:

我有一个端点,它发布请求物联网设备发送新的阅读数据。我正在使用 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})

  }) 

... }

【问题讨论】:

    标签: reactjs pubnub cleartimeout


    【解决方案1】:

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

    【讨论】:

    • 感谢 Lukasz,在构造函数中初始化 var 并清除 ComponentDidUpdate 中的超时修复了问题。
    猜你喜欢
    • 2017-01-21
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多