如何使用JS clearTimeout和参数?

时间:2017-12-29 11:24:35

标签: javascript node.js

我想创建一个非常简单的功能来模拟窗帘的运动。它在服务器上运行,该服务器将收到direction参数的请求,该参数说明盲人应该UPDOWN还是应该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);
        }

1 个答案:

答案 0 :(得分:3)

您正在将函数引用传递给clearTimeout,它需要timeoutID返回setTimeout()

在全球范围内定义

var timeoutID;

通过setTimeout()方法

保留timeout-id返回值
timeoutID = blindMovementFunction(req.query.direction)

clearTimeout(timeoutID);