【发布时间】:2020-06-12 15:33:38
【问题描述】:
当使用setTimeout() 向我们的API 发出POST 请求时,我正在我的服务器上设置一个计时器。在计时器执行并发送200 OK 响应后,我想对我的应用程序中的一些 DOM 元素进行更新。我的问题是,如果将计时器设置为长时间(例如 30 分钟以上),POST 请求会过期并发送400 响应,还是会无限期地等待直到做出响应?我的猜测是它会过期,但我不是 100% 确定。如果是这样,如何确保在计时器执行后客户端会收到响应?
这是将在 POST 请求中执行的代码:
setTimeout(() => {
io.emit('insertWaitTime',{AlertID: req.body.AlertID, Time: null});
io.emit('updateStep',{AlertID: req.body.AlertID, Step: req.body.NextStep}, (res) => {
if(!boolean){
console.log("ERROR: /api/setTimer: Could not update alert");
}else{
res.status(200).send({
Message: "SUCCESS: timer was executed",
Status: 200
})
}
})
}, (60000 * req.body.Minutes));
在 200 响应之后,我将更新我的 DOM 元素客户端:
let timerObj = {
Minutes: 15
AlertID: this.props.AlertID,
NextStep: this.props.NextStep,
}
axios.post('/setTimer', timerObj, (res) => {
// do all dom updating after good response
console.log(res);
if(res.Status === 200){
document.getElementByID('myel').style.display = 'none';
}
})
我需要将此计时器设置为服务器端,因为这可能会被多次调用,并且不适合设置客户端,因为它可能会导致严重的副作用。如果有人对这是否可行有任何想法,或者我必须走一条完全不同的路线,我将不胜感激。谢谢!
【问题讨论】:
标签: javascript node.js