Javascript 在NodeRed中使用clearInterval

Javascript 在NodeRed中使用clearInterval,javascript,node-red,home-assistant,Javascript,Node Red,Home Assistant,我正在使用NodeRed和家庭助理。我有一个webhook,我可以从一个物理设备发送它,它可以触发节点红色的功能节点。功能节点如下所示: var i = 1; var myTimer = setInterval(function setSlackStatus(){ if (i < 14){ var minutesLeft = totalMinutes - [i]; msg.payload = { "profile": {

我正在使用NodeRed和家庭助理。我有一个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];
var i=1;
var myTimer=setInterval(函数setSlackStatus(){
如果(i<14){
var minutesLeft=总分钟数-[i];
msg.payload={
“简介”:{
“状态文本”:“返回”+分钟左+“分钟”,
“状态表情”:“咖啡”:,
“状态\到期”:0
}
};
node.send(msg);
i++;
}否则如果(i==14){
var minutesLeft=总分钟数-[i];
msg.payload={
“简介”:{
“状态文本”:“返回”+分钟左+“分钟”,
“状态表情”:“咖啡”:,
“状态\到期”:0
}
};
node.send(msg);
i++;
}否则如果(i==15){
msg.payload={
“简介”:{
“状态文字”:“我马上就回来”,
“状态表情”:“咖啡”:,
“状态\到期”:0
}
};
node.send(msg);
清除间隔(myTimer);
i=1;
}
}, 60000)
msg.payload={
“简介”:{
“状态文本”:“15分钟后返回”,
“状态表情”:“咖啡”:,
“状态\到期”:0
}
};
如果(msg.clearTimer==“true”){
msg.payload=“接收到清除计时器信号。”;
清除间隔(myTimer);
} 
返回[味精];
当我发送webhook时,这个函数基本上通过一个函数循环,每分钟更新一次我的松弛状态,直到我回来

我现在正在寻找的是,如果需要的话,能够在中途清除该循环。所以我创建了第二个webhook,它将msg.clearTimer设置为“true”,然后触发同一个节点。然而,当我在调试节点中得到一条消息,表示已接收到清除计时器信号时,函数将以1分钟的间隔继续调用,直到它在整个循环中运行为止


我想知道的是为什么。一旦我触发了这个循环函数,似乎就没有办法取消它了。任何建议都将不胜感激。

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

如果需要跨调用持久化,那么需要从上下文中存储和检索它们。可以找到有关如何在函数节点中使用上下文的文档


至于手头的任务,我希望使用设置为定期触发的注入节点,然后使用由上下文变量控制的开关节点对其进行选通,而不是在函数节点中运行计时器。

这很有意义。谢谢