第二次尝试 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
.
我有一个端点发布请求,要求 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
.