我想创建一个非常简单的功能来模拟窗帘的运动。它在服务器上运行,该服务器将收到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);
}
答案 0 :(得分:3)
您正在将函数引用传递给clearTimeout
,它需要timeoutID
返回setTimeout()
在全球范围内定义
var timeoutID;
通过setTimeout()
方法
timeoutID = blindMovementFunction(req.query.direction)
和
clearTimeout(timeoutID);