如何在 node-red.. 中停止 JS 中的 setInterval? [英] how to stop setInterval in JS in node-red..?

查看:89
本文介绍了如何在 node-red.. 中停止 JS 中的 setInterval?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 node-red 中编写一个函数节点,当从注入节点获取 msg.paylaod 为 true 并在获取 msg.payload 来自另一个注入节点的false".它开始提供输出,但在注入有效负载false"时不会停止.

节点代码:

<预><代码>[{"id":"b6c9b219.90a478","类型":"功能","z":"a3d6aff.bd4935",名称":"","func":"var i = 1;\nfunction increment(){\ni = i + 1;\n msg={payload:i};\n node.send(msg);\n \n}\nif(msg.payload===true){\nvar interval = setInterval( increment, 1000);\nif(msg.payload===false){\n clearInterval(interval);\n}\n}\n\n",输出":1,没有错误":0,x":700.5,"y":581,电线":[[12f2090c.587347"]]},{"id":"12f2090c.587347","类型":"调试","z":"a3d6aff.bd4935",名称":"",活动":真,tosidebar":真,控制台":假,状态":假,"完整":"真","x":826.5,"y":473,电线":[]},{"id":"26abbbf.05cf944","类型":"注入","z":"a3d6aff.bd4935",名称":"",话题":"","payload":"true","payloadType":"bool",重复":"","crontab":"",一次":假,一次延迟":0.1,"x":654.88330078125,"y":767.2833251953125,电线":[[b6c9b219.90a478"]]},{"id":"880341a0.dcab2","类型":"注入","z":"a3d6aff.bd4935",名称":"",话题":"","payload":"false","payloadType":"bool",重复":"","crontab":"",一次":假,一次延迟":0.1,"x":643.88330078125,"y":824.0999755859375,电线":[[b6c9b219.90a478"]]}]

功能节点代码:

var i = 1;函数增量(){i = i + 1;味精={值:我};节点.发送(味精);if(msg.payload===false){清除间隔(间隔);}}if(msg.payload===true){var interval = setInterval( 增量, 1000);}

解决方案

我是这样解决的.请看看我的节点代码.还请建议是否可以通过其他更好的方式完成.

<预><代码>[{"id": "b6c9b219.90a478","类型": "功能","z": "a3d6aff.bd4935",名称": "","func": "var i = 0;\nfunction increment(){\ni = i + 1;\n msg={value:i};\n node.send(msg);\n if(global.get(\"a\")===\"off\"){\n clearInterval(interval);\n }\n}\n\nif(msg.payload===true){\nvar interval = setInterval( increment, 1000);\n}",输出":1,没有错误":0,x":450.5000305175781,y":508,电线":[[12f2090c.587347"]]},{"id": "12f2090c.587347",类型":调试","z": "a3d6aff.bd4935",名称": "",活动":真实,tosidebar":真的,控制台":假,tostatus":假,完整":真实",x":699.5,y":686.9999694824219,电线":[]},{"id": "26abbbf.05cf944",类型":注入","z": "a3d6aff.bd4935",名称": "",话题": "","payload": "true","payloadType": "bool",重复": "","crontab": "",一次":假,一次延迟":0.1,x":305.8833312988281,y":430.2833557128906,电线":[["b6c9b219.90a478",4fdb56dd.8ef"]]},{"id": "880341a0.dcab2",类型":注入","z": "a3d6aff.bd4935",名称": "",话题": "",有效载荷":假","payloadType": "bool",重复": "","crontab": "",一次":假,一次延迟":0.1,x":207.88333129882812,y":666.0999450683594,电线":[["4fdb56dd.8ef",b6c9b219.90a478"]]},{"id": "4fdb56dd.8ef","类型": "功能","z": "a3d6aff.bd4935",名称": "","func": "if(msg.payload===false){\n global.set(\"a\",\"off\");\n}\nif (msg.payload===true){\n global.set(\"a\",\"on\");\n}\nmsg={payload:global.get(\"a\")}\nreturn msg;",输出":1,没有错误":0,x":202.26666259765625,y":554.2332458496094,电线":[[]]}]

I'm trying to code a function node in node-red which will give output as increasing numbers by 1 for every second when get msg.paylaod true from inject node and stop when get msg.payload "false" from another inject node. it starts giving output but don't stop when payload "false" is injected.

Node code:

[  
   {  
      "id":"b6c9b219.90a478",
      "type":"function",
      "z":"a3d6aff.bd4935",
      "name":"",
      "func":"var i = 1;\nfunction increment(){\n    i = i + 1;\n    msg={payload:i};\n    node.send(msg);\n   \n}\nif(msg.payload===true){\nvar interval = setInterval( increment, 1000);\nif(msg.payload===false){\n    clearInterval(interval);\n}\n}\n\n",
      "outputs":1,
      "noerr":0,
      "x":700.5,
      "y":581,
      "wires":[  
         [  
            "12f2090c.587347"
         ]
      ]
   },
   {  
      "id":"12f2090c.587347",
      "type":"debug",
      "z":"a3d6aff.bd4935",
      "name":"",
      "active":true,
      "tosidebar":true,
      "console":false,
      "tostatus":false,
      "complete":"true",
      "x":826.5,
      "y":473,
      "wires":[  

      ]
   },
   {  
      "id":"26abbbf.05cf944",
      "type":"inject",
      "z":"a3d6aff.bd4935",
      "name":"",
      "topic":"",
      "payload":"true",
      "payloadType":"bool",
      "repeat":"",
      "crontab":"",
      "once":false,
      "onceDelay":0.1,
      "x":654.88330078125,
      "y":767.2833251953125,
      "wires":[  
         [  
            "b6c9b219.90a478"
         ]
      ]
   },
   {  
      "id":"880341a0.dcab2",
      "type":"inject",
      "z":"a3d6aff.bd4935",
      "name":"",
      "topic":"",
      "payload":"false",
      "payloadType":"bool",
      "repeat":"",
      "crontab":"",
      "once":false,
      "onceDelay":0.1,
      "x":643.88330078125,
      "y":824.0999755859375,
      "wires":[  
         [  
            "b6c9b219.90a478"
         ]
      ]
   }
]

Code of function node:

var i = 1;
function increment(){
    i = i + 1;
    msg={value:i};
    node.send(msg);
     if(msg.payload===false){
     clearInterval(interval);
   }

}
if(msg.payload===true){
var interval = setInterval( increment, 1000);

}

解决方案

I solved it like this. please take look at my node code. also please suggest if it can be done some other better way.

[
  {
    "id": "b6c9b219.90a478",
    "type": "function",
    "z": "a3d6aff.bd4935",
    "name": "",
    "func": "var i = 0;\nfunction increment(){\n    i = i + 1;\n    msg={value:i};\n    node.send(msg);\n    if(global.get(\"a\")===\"off\"){\n    clearInterval(interval);\n    }\n}\n\nif(msg.payload===true){\nvar interval = setInterval( increment, 1000);\n}",
    "outputs": 1,
    "noerr": 0,
    "x": 450.5000305175781,
    "y": 508,
    "wires": [
      [
        "12f2090c.587347"
      ]
    ]
  },
  {
    "id": "12f2090c.587347",
    "type": "debug",
    "z": "a3d6aff.bd4935",
    "name": "",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "true",
    "x": 699.5,
    "y": 686.9999694824219,
    "wires": []
  },
  {
    "id": "26abbbf.05cf944",
    "type": "inject",
    "z": "a3d6aff.bd4935",
    "name": "",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "x": 305.8833312988281,
    "y": 430.2833557128906,
    "wires": [
      [
        "b6c9b219.90a478",
        "4fdb56dd.8ef"
      ]
    ]
  },
  {
    "id": "880341a0.dcab2",
    "type": "inject",
    "z": "a3d6aff.bd4935",
    "name": "",
    "topic": "",
    "payload": "false",
    "payloadType": "bool",
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "x": 207.88333129882812,
    "y": 666.0999450683594,
    "wires": [
      [
        "4fdb56dd.8ef",
        "b6c9b219.90a478"
      ]
    ]
  },
  {
    "id": "4fdb56dd.8ef",
    "type": "function",
    "z": "a3d6aff.bd4935",
    "name": "",
    "func": "if(msg.payload===false){\n    global.set(\"a\",\"off\");\n}\nif (msg.payload===true){\n    global.set(\"a\",\"on\");\n}\nmsg={payload:global.get(\"a\")}\nreturn msg;",
    "outputs": 1,
    "noerr": 0,
    "x": 202.26666259765625,
    "y": 554.2332458496094,
    "wires": [
      []
    ]
  }
]

这篇关于如何在 node-red.. 中停止 JS 中的 setInterval?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆