在NodeRed中使用clearInterval

问题描述 投票:0回答:1

我正在将NodeRed与Home Assistant结合使用。我有一个Webhook,可以从触发红色节点中的功能节点的物理设备发送。函数节点如下所示:

var i = 1;

var myTimer = setInterval(function setSlackStatus(){
    if (i < 14){
        var minutesLeft = totalMinutes - [i];

        msg.payload = {
            "profile": {
                "status_text": "Back in " + minutesLeft + " minutes",
                "status_emoji": ":coffee:",
                "status_expiration": 0
            }
        };
        node.send(msg);

        i++;
    } else if (i == 14 ){
        var minutesLeft = totalMinutes - [i];

        msg.payload = {
            "profile": {
                "status_text": "Back in " + minutesLeft + " minute",
                "status_emoji": ":coffee:",
                "status_expiration": 0
            }
        };
        node.send(msg);

        i++;
    } else if (i == 15){
        msg.payload = {
            "profile": {
                "status_text": "I'll be back any second now",
                "status_emoji": ":coffee:",
                "status_expiration": 0
            }
        };
        node.send(msg);

        clearInterval(myTimer);
        i = 1;
    }
}, 60000)

msg.payload = {
    "profile": {
        "status_text": "Back in 15 minutes",
        "status_emoji": ":coffee:",
        "status_expiration": 0
    }
};

if (msg.clearTimer == "true") {
    msg.payload = "Clear Timer signal received.";
    clearInterval(myTimer);
} 

return [msg];

[当我发送webhook时,此功能基本上会遍历一个功能,每分钟更新一次我的Slack状态,直到我回来。

我现在正在寻找的功能是,如果需要,可以在中途清除该循环。因此,我创建了第二个Webhook,将msg.clearTimer设置为“ true”,然后触发了该节点。但是,虽然我在调试节点中收到一条消息,即已收到Clear Timer信号,但该函数将继续每隔1分钟调用一次,直到它遍历整个循环为止。

我想知道为什么。一旦触发了此循环功能,似乎就无法取消它。任何建议将不胜感激。

我正在将NodeRed与Home Assistant结合使用。我有一个Webhook,可以从触发红色节点中的功能节点的物理设备发送。函数节点如下所示:var i = 1; var myTimer = ...

javascript node-red home-assistant
1个回答
0
投票

每条消息都是独立处理的,因此,当第二条消息到达时,在第一个消息到达函数节点时声明和使用的任何变量将不存在(并且无论如何,您将在函数开始时覆盖myTimer值)

© www.soinside.com 2019 - 2024. All rights reserved.