首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >第二次尝试clearTimeout执行失败

第二次尝试clearTimeout执行失败
EN

Stack Overflow用户
提问于 2018-07-26 03:43:10
回答 1查看 39关注 0票数 1

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

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

代码语言:javascript
运行
复制
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})

  }) 

... }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-26 03:56:54

由于作用域隔离,您需要在此函数外部声明超时id CancelTimeout。现在,CancelTimeout是局部变量,仅在此函数运行时创建。最好的地方是在组件中的this上。就像this.CancelTimeout一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51526556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档