我有一个端点,它发布IoT设备发送新读数数据的请求。我正在利用PubNub平台。
在我第一次尝试时,当我得到一个成功响应时,我的clearTimeout函数正确地取消了计时器,并且没有更新状态以显示错误消息。但是,每次我尝试第二次执行请求时,clearTimeout函数都无法停止计时器。我得到了成功响应,但也得到了timed out响应,它向用户显示我的错误消息。
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})
})
... }发布于 2018-07-26 03:56:54
由于作用域隔离,您需要在此函数外部声明超时id CancelTimeout。现在,CancelTimeout是局部变量,仅在此函数运行时创建。最好的地方是在组件中的this上。就像this.CancelTimeout一样。
https://stackoverflow.com/questions/51526556
复制相似问题