"OFF" 负载上的 clearInterval
clearInterval on "OFF" payload
我在使用特定负载实施 clearInterval 时遇到新手困难。
if(msg.payload.state === "OFF")
有效,但计时器不会停止。
在众多资源中,我看过how to stop setInterval in JS in node-red..?, , clearInterval doesn't clearInterval & clearInterval On Image Slider Plugin
我确实有一个类似的函数,"dominos",我用它来确保我正在解析 "OFF" 有效负载。
我已经包含了很多注释代码来展示我的尝试。抱歉弄得一团糟!
我的语法有问题吗?
代码是否合乎逻辑?
var input = msg.payload.state;
let timer = 0;
var red = {"state":"ON","brightness":255,"color":{"r":255,"g":0,"b":0}};
var green = {"state":"ON","brightness":255,"color":{"r":0,"g":255,"b":0}};
function xmas() { // REPEATS!
node.send({payload:red});
setTimeout(function(){
node.send({payload:green});
}, 1500);
}
// repeat with 3 second interval
timer = setInterval(() => xmas(), 3000);
if (msg.payload.state === "OFF") {
timer = clearInterval();
}
关于功能节点要记住的重要一点是,它的状态会针对每条传入消息完全重置。这意味着计时器将始终由 let timer = 0;
重置为零
如果你想在消息之间存储任何状态,那么你需要使用 context。
另外,您使用 clearInterval()
的方式永远行不通,您需要将计时器对象的引用传递给此函数,以便它执行任何有用的操作。
以下功能节点应该符合我的预期。
var red = {"state":"ON","brightness":255,"color":{"r":255,"g":0,"b":0}};
var green = {"state":"ON","brightness":255,"color":{"r":0,"g":255,"b":0}};
if (msg.payload.state != "OFF") {
var timer = setInteval(()=>{
node.send({payload: red});
setTimeout(() => {
node.send({payload: green});
}, 1500);
}, 3000);
context.set("timer",timer);
} else {
var timer = context.get("timer");
clearInterval(timer);
}
我在使用特定负载实施 clearInterval 时遇到新手困难。
if(msg.payload.state === "OFF")
有效,但计时器不会停止。
在众多资源中,我看过how to stop setInterval in JS in node-red..?,
我确实有一个类似的函数,"dominos",我用它来确保我正在解析 "OFF" 有效负载。 我已经包含了很多注释代码来展示我的尝试。抱歉弄得一团糟!
我的语法有问题吗?
代码是否合乎逻辑?
var input = msg.payload.state;
let timer = 0;
var red = {"state":"ON","brightness":255,"color":{"r":255,"g":0,"b":0}};
var green = {"state":"ON","brightness":255,"color":{"r":0,"g":255,"b":0}};
function xmas() { // REPEATS!
node.send({payload:red});
setTimeout(function(){
node.send({payload:green});
}, 1500);
}
// repeat with 3 second interval
timer = setInterval(() => xmas(), 3000);
if (msg.payload.state === "OFF") {
timer = clearInterval();
}
关于功能节点要记住的重要一点是,它的状态会针对每条传入消息完全重置。这意味着计时器将始终由 let timer = 0;
如果你想在消息之间存储任何状态,那么你需要使用 context。
另外,您使用 clearInterval()
的方式永远行不通,您需要将计时器对象的引用传递给此函数,以便它执行任何有用的操作。
以下功能节点应该符合我的预期。
var red = {"state":"ON","brightness":255,"color":{"r":255,"g":0,"b":0}};
var green = {"state":"ON","brightness":255,"color":{"r":0,"g":255,"b":0}};
if (msg.payload.state != "OFF") {
var timer = setInteval(()=>{
node.send({payload: red});
setTimeout(() => {
node.send({payload: green});
}, 1500);
}, 3000);
context.set("timer",timer);
} else {
var timer = context.get("timer");
clearInterval(timer);
}