NodeRed基础1–循环结构

NodeRed基础1–循环结构创建循环是常见的编程技术 node red contrib loop 节点在 Node RED 中为它们提供支持 节点名 node red contrib loopnode red contrib loop 您可以在三种循环之间进行选择 具有固定重复计数的循环 基于评估条件的循环或迭代可迭代枚举的循环 常见描述您可以通过发送 msg command 到输入来控制循环 如果它包含一个 break 字符串 则循环将立即结束 如果它包含一个 restart 字符串 则循环将从第一个值重新开始 该节点

创建循环是常见的编程技术。node-red-contrib-loop 节点在 Node-RED 中为它们提供支持。

节点名:  node-red-contrib-loop

node-red-contrib-loop

您可以在三种循环之间进行选择。具有固定重复计数的循环,基于评估条件的循环或迭代可迭代枚举的循环。

常见描述

您可以通过发送msg.command到输入来控制循环。如果它包含一个break字符串,则循环将立即结束。如果它包含一个restart字符串,则循环将从第一个值重新开始。

该节点有两个输出:循环结束和循环步骤。当循环离开时,第一个输出在最后使用。通过循环处理节点将第二个输出连接到输入,即创建循环。

NodeRed基础1--循环结构

 连接到循环输出步骤msg.loop的处理循环中的节点将获得具有以下属性的对象:

  • index– 计数器从 0 加 1

它可能包含更多属性,但它们取决于循环的类型。请参阅下面的每个循环类型部分。您可以选择要放置到的属性之一msg.payload。为此,请使用编辑器表单中的Loop Payload属性。

循环输出结束时,您将获得msg.loop具有以下属性的对象:

  • broken– 如果循环已收到break命令,则为 true
  • timeout– 如果超时已过期,则为 true
  • passed.total– 通过循环的总次数,包括所有重新启动
  • passed.last– 从上次重新启动或开始通过循环的次数
  • restarts– 循环重新启动的次数

您还将获得msg.payload循环输出结束。它应该包含哪个值是可选的。您可以在循环中的最后一个有效负载和节点在开始时在输入上接收的原始有效负载之间进行选择。使用编辑器表单中的End Payload进行选择。

您可以限制所有三种循环的时间。在编辑器表单中或即时使用时间限制msg.limit。时间以毫秒为单位指定。

“固定计数”循环种类

当您希望使用数字计数器进行固定次数的重复时,请使用此循环类型。

NodeRed基础1--循环结构

 

Count字段指定通过循环的次数。您可以省略它并msg.count即时使用。

Initial Value字段指定计数器应从哪个值开始计数。您可以省略它并msg.initial即时使用。

步长值字段指定计数器的步长增量或减量。

连接到循环输出步骤的处理分支中的节点将获得msg.loop具有以下附加属性的对象:

  • value– 计数器值
  • count– 请求通过循环的次数
  • initial– 计数器开始的值
  • step– 用于递增或递减计数器的值

“条件”循环类型

当您需要基于某些条件的循环时,请使用此循环类型。

NodeRed基础1--循环结构

您需要在条件字段中定义条件。您可以从三种语言中进行选择。

  • JavaScript – 用 Ja​​vaScript 语言编写为代码的条件。条件评估将使用最后一部分的结果。如果是 则循环将继续true,否则循环将结束。示例:
      msg.payload !== "done"
      roses = global.get("roses"); global.set("roses", ++roses); roses <= 100
    JavaScript 代码在沙箱中执行,具有类似于功能节点的有限环境。






  • JSONata - 作为JSONata表达式的条件。如果表达式被评估为 ,则循环将继续true,否则循环将结束。例子:
      msg.payload in [1,2,3,5,7,13,21]
      $globalContext("status") or msg.size > 10




  • 正则表达式- 与 test() 函数一起使用的正则表达式应用于msg.payload. 如果匹配,则循环将继续,否则循环将结束。例子:
      file[0-9].txt
      ^[a-zA-Z0-9]+: .*




接下来的三个示例以不同的速度在不同的语言中执行相同的工作(测试字符串是否以“Z”字符结尾):

  msg.payload.substr(-1) != "Z"
  $substring(msg.payload, -1) != "Z"
  .*[^Z]




在这种情况下,JavaScript 是最快的,而 Regex 是最慢的。但是,对于更复杂的表达式,这可能会有所不同。用这些语言中的每一种都不是很容易或不可能写出来的。例如,Regex 仅用于比较字符串,但它也是复杂搜索模式的最佳选择。

您可以选择是否应在循环之前之后评估条件。不同之处在于在第一种情况下评估初始值的条件。与经典编程相比,第一个选项是“while‥do”循环,第二个选项是“do‥while”/“repeat‥until”循环。

msg.loop没有此循环类型的其他属性。

“枚举”循环种类

当你想迭代一些枚举时使用这种循环类型。它必须是可迭代的,分别是:Array、Typed Array、Object、Map、Set 和 String。

NodeRed基础1--循环结构

您需要将枚举字段中的枚举指定为消息、流或全局上下文的属性。您也可以直接将其指定为 JSON 或普通字符串。

连接到循环输出步骤的处理分支中的节点将获得一个msg.loop具有以下附加属性的对象:

  • value- 迭代项目值
  • key- 迭代项键;仅用于一般对象和地图
  • enumeration- 它迭代的对象

实例:循环输出2到10数字

NodeRed基础1--循环结构

 NodeRed基础1--循环结构

 NodeRed基础1--循环结构

输出:

NodeRed基础1--循环结构

 

 源码:

[ { "id": "f6f2187d.f17ca8", "type": "tab", "label": "Flow 1", "disabled": false, "info": "" }, { "id": "a0d982d71f964d84", "type": "inject", "z": "f6f2187d.f17ca8", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 330, "y": 480, "wires": [ [ "90c556d22c878a58" ] ] }, { "id": "28ce84984ae809bf", "type": "debug", "z": "f6f2187d.f17ca8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 790, "y": 580, "wires": [] }, { "id": "90c556d22c878a58", "type": "loop", "z": "f6f2187d.f17ca8", "name": "", "kind": "fcnt", "count": "10", "initial": "1", "step": "1", "condition": "", "conditionType": "js", "when": "before", "enumeration": "enum", "enumerationType": "msg", "limit": "10", "loopPayload": "loop-val", "finalPayload": "final-last", "x": 550, "y": 480, "wires": [ [], [ "c99878db6c70d523" ] ] }, { "id": "c99878db6c70d523", "type": "function", "z": "f6f2187d.f17ca8", "name": "", "func": "var m=msg.payload+1;\nmsg.payload=m;\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 550, "y": 580, "wires": [ [ "90c556d22c878a58", "28ce84984ae809bf" ] ] } ]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213374.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:58
下一篇 2026年3月18日 下午5:58


相关推荐

  • 访问网站出现 Directory Listing Denied This Virtual Directory

    访问网站出现 Directory Listing Denied This Virtual Directory

    2021年9月20日
    45
  • redis面试必会6题经典(redis集合面试题)

    Redis面试题1、什么是Redis?.2、Redis的数据类型?3、使用Redis有哪些好处?4、Redis相比Memcached有哪些优势?5、Memcache与Redis的区别都有哪些?6、Redis是单进程单线程的?7、一个字符串类型的值能存储最大容量是多少?8、Redis的持久化机制是什么?各自的优缺点?9、Redis常见性…

    2022年4月16日
    367
  • 51单片机智能小车循迹PPT_基于51单片机的智能小车

    51单片机智能小车循迹PPT_基于51单片机的智能小车第3章系统硬件电路设计3.1总体设计智能小车采用两个前轮和一个万向轮的方式,在前轮的左右两端各安装一个电机驱动,利用电机驱动芯片L293D来控制两个前轮的左右转向和停止,后轮是一个万向轮,有支撑和转向的作用。在车体底盘的前端装有4个红外光电传感器,用以实现路迹检测和避障功能。小在小车的车头还装置有超声波探测模块HC-SR04,当前方检测到障碍物时,小车能够做出相应的反应。总体设计框图如图3-1。…

    2022年10月17日
    3
  • n个进程访问一个临界资源,则设置的互斥信号量_多线程同步和互斥有几种实现方法

    n个进程访问一个临界资源,则设置的互斥信号量_多线程同步和互斥有几种实现方法一、【临界区】每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界 资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区, 进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程 必须互斥地对它进行访问。多个进程中涉及到同一个临界资源的临界区称为相关临界区。【进程进入临界区的调度原则】如果有若干进程要求进入空闲的临界区,一…

    2022年8月18日
    9
  • python下载hashlib命令_python之hashlib模块[通俗易懂]

    python下载hashlib命令_python之hashlib模块[通俗易懂]importhashlib#md5加密工具,md5是不可逆的,所以只能比较密文,不能比较明文,python中不仅仅提供md5加密方法,还提供sha1,sha224,sha256,sha384,sha512,MD5加密算法test_md5=hashlib.md5()test_md5.update(bytes(‘123′,encoding=’utf-8’))ret=test_md5.hexd…

    2022年6月1日
    44
  • ubuntu安装go语言_go语言web服务器

    ubuntu安装go语言_go语言web服务器来源:微信公众号「编程学习基地」文章目录简介下载go安装包环境配置添加环境变量第一个go语言程序go入门学习简介go语言是一种开源的、语法精简的静态编程语言,它的开源社区比较庞大,应用场景非常广范。可以用于系统监控、容器技术(Docker)、大数据、存储技术、分布式系统(HyperledgerFabric)、消息系统(Kafka客户端)、服务器管理、安全工具、Web工具等。这里介绍在Linux上安装并配置go。下载go安装包到GoLang中国,下载Go语言安装包。解压tar-xzv..

    2022年10月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号