我想创建一个非常简单的函数来模拟百叶窗的运动。它是将收到的请求的服务器上运行direction
参数,上面写着盲人是否应该去UP
,DOWN
或者它应该STOP
。
模拟应该是这样工作的:请求带有direction
参数,服务器响应盲人是MOVING
。无论方向如何,运动都会持续 10 秒,如setTimeout
函数中所示。关键是如果服务器收到一个请求,direction === STOP
那么服务器应该调用clearTimeout
“停止”盲人的运动并返回一个不同的盲人状态,说盲人是PARTLY_CLOSED
。
到目前为止,它是这样工作的,如果我发送一个带有某个方向的请求,服务器会MOVING
按照它应该的方式进行响应。当我clearTimeout
在“运动”期间调用时,它实际上启动了第二个setTimeout
功能。
我的问题是:如何使代码正确以及如何对setTimeout
函数进行参数化?
这是代码:
let blindState = "OPENED";
const blindMovementFunction = (direction) => setTimeout((direction) => {
console.log("### direction", direction);
if (direction === "UP") {
blindState = "OPENED"
} else if (direction === "DOWN") {
blindState = "CLOSED";
}
}, 10000);
端点内的用法:
if (req.query.direction === "STOP") {
console.log("### blindMovementFunction", blindMovementFunction);
clearTimeout(blindMovementFunction);
blindState = "PARTLY_CLOSED";
res.send(blindState);
} else {
blindState = "MOVING";
res.send(blindState);
blindMovementFunction(req.query.direction);
}
您正在将函数引用传递给clearTimeout
,它需要timeoutID
由setTimeout()
在全局范围内定义
var timeoutID;
通过setTimeout()
方法持久化 timeout-id 返回
timeoutID = blindMovementFunction(req.query.direction)
和
clearTimeout(timeoutID);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句