私は、ウィンドウブラインドの動きをシミュレートする非常に単純な関数を作成したかったのです。これは、direction
パラメータで、ブラインドがUP
、DOWN
になるか、またはSTOP
になる必要があるかを示す要求を受け取るサーバーで実行されます。パラメータでJS clearTimeoutを使用するにはどうすればよいですか?
このシミュレーションは、direction
パラメータが要求され、サーバはブラインドがMOVING
であると応答します。方向にかかわらず、動きはsetTimeout
機能で見ることができるので、10秒間続く。サーバがdirection === STOP
でリクエストを受信した場合、サーバはclearTimeout
に電話をかけて、ブラインドの動きを「停止」し、ブラインドがPARTLY_CLOSED
であると言って、別のブラインド状態に戻す必要があります。
これまでのところ、私はある方向の要求を送ると、サーバーはMOVING
で応答します。私がclearTimeout
を "移動"中に呼び出すと、実際には2番目の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);
}
でタイムアウト-idのリターンを持続、それはsetTimeoutメソッドの呼び出しによって生成されたIDを使用する必要があります。 – Axnyff
@Axnyffあなたのコメントを少し拡大できますか?すべてのスニペットはコード内の別の場所に配置されます。最初のスニペットは「グローバル」で、2つ目はリクエストのハンドラ関数内にあります。 IDをどこに割り当てる必要がありますか?リクエストハンドラ関数では? –