『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 958|回复: 5

[流程系列] node.sent(msg)与循环

[复制链接]

12

主题

86

帖子

1096

积分

金牌会员

Rank: 6Rank: 6

积分
1096
金钱
1010
HASS币
0
发表于 2023-1-17 22:05:53 | 显示全部楼层 |阅读模式
分别写了两个函数,第一个函数在循环体中使用了node.send(msg),我的理解是node.send函数有类似break的功能可以跳出了循环,node.send以下的函数就不执行了,然后循环继续,例如
Snipaste_2023-01-17_22-03-25.jpg

然而在另一个函数,用类延时,结果i永远等于2
Snipaste_2023-01-17_22-04-01.jpg
所以菜鸟就搞不懂了
回复

使用道具 举报

12

主题

86

帖子

1096

积分

金牌会员

Rank: 6Rank: 6

积分
1096
金钱
1010
HASS币
0
 楼主| 发表于 2023-1-18 12:47:58 | 显示全部楼层
看了几个教程,虽然没看懂,但我知道了是setTimeout()这个程序决定的,也就是说他并不是真正的中断进程并延时回复。
具体要怎么改,其实我也没看懂。
回复

使用道具 举报

76

主题

1358

帖子

1万

积分

元老级技术达人

积分
18475
金钱
17077
HASS币
290
发表于 2023-1-18 12:52:26 | 显示全部楼层
node.send(msg)的作用就是 return msg 而不中断代码的执行。常用于函数循环中使用。

i永远等于2,不可能吧?i肯定是从0到2,只是最后会停留在2。之前0和1时也都会发送msg到后面节点了。
回复

使用道具 举报

3

主题

317

帖子

2663

积分

论坛积极会员

积分
2663
金钱
2346
HASS币
10
发表于 2023-1-18 16:42:04 | 显示全部楼层
node.send没有break的效果,只是将消息从输出节点输出。setTimeout() 是属于 window 的方法,该方法用于在指定的毫秒数后调用函数或计算表达式。也就是说,它要等待60秒后,才会调用匿名函数,此时的i早已经变成了2,所以所有的输出都会是2;要达到想要的效果,要把setTimeout()封装到一个function中,然后重新生成一个msg,再给setTimeout()延迟发送就可以了;

参考:
var all = ["a","b","c"];
for(var i=0;i<all.length;i++){
    delaySend(i, all[i]);
}

function delaySend(topic, last){
    let newMsg = {"topic":topic , "last":last};
    setTimeout(() => node.send(newMsg), 1000);
}

评分

参与人数 1金钱 +10 收起 理由
dscao + 10 学习了

查看全部评分

回复

使用道具 举报

12

主题

86

帖子

1096

积分

金牌会员

Rank: 6Rank: 6

积分
1096
金钱
1010
HASS币
0
 楼主| 发表于 2023-1-18 20:45:27 | 显示全部楼层
tcwj2008 发表于 2023-1-18 16:42
node.send没有break的效果,只是将消息从输出节点输出。setTimeout() 是属于 window 的方法,该方法用于在 ...

原来是这样子,果然是会者不难,难者不会。
关于setTimeout说穿了原来如此简单
回复

使用道具 举报

3

主题

317

帖子

2663

积分

论坛积极会员

积分
2663
金钱
2346
HASS币
10
发表于 2023-1-19 11:01:15 | 显示全部楼层
梅林听风 发表于 2023-1-18 20:45
原来是这样子,果然是会者不难,难者不会。
关于setTimeout说穿了原来如此简单 ...

我大概猜你是想控制速率,不要一下子全发过去,那不用setTimeout,后面挂个delay节点就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-2 10:47 , Processed in 0.413982 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表