梅林听风 发表于 2023-1-17 22:05:53

node.sent(msg)与循环

分别写了两个函数,第一个函数在循环体中使用了node.send(msg),我的理解是node.send函数有类似break的功能可以跳出了循环,node.send以下的函数就不执行了,然后循环继续,例如


然而在另一个函数,用类延时,结果i永远等于2

所以菜鸟就搞不懂了

梅林听风 发表于 2023-1-18 12:47:58

看了几个教程,虽然没看懂,但我知道了是setTimeout()这个程序决定的,也就是说他并不是真正的中断进程并延时回复。
具体要怎么改,其实我也没看懂。

dscao 发表于 2023-1-18 12:52:26

node.send(msg)的作用就是 return msg 而不中断代码的执行。常用于函数循环中使用。

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

tcwj2008 发表于 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);
}

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

梅林听风 发表于 2023-1-18 20:45:27

tcwj2008 发表于 2023-1-18 16:42
node.send没有break的效果,只是将消息从输出节点输出。setTimeout() 是属于 window 的方法,该方法用于在 ...

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

tcwj2008 发表于 2023-1-19 11:01:15

梅林听风 发表于 2023-1-18 20:45
原来是这样子,果然是会者不难,难者不会。
关于setTimeout说穿了原来如此简单 ...

我大概猜你是想控制速率,不要一下子全发过去,那不用setTimeout,后面挂个delay节点就好了
页: [1]
查看完整版本: node.sent(msg)与循环