Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在for循环中等待事件函数_Javascript_Node.js_Asynchronous_Async Await - Fatal编程技术网

Javascript 在for循环中等待事件函数

Javascript 在for循环中等待事件函数,javascript,node.js,asynchronous,async-await,Javascript,Node.js,Asynchronous,Async Await,我需要在for循环中等待,直到调用事件函数为止。 我正在等待子进程的响应,我正在使用let worker=cluster.fork()创建子进程 我用数组中的特殊消息来回答每个子进程。因此,如果for循环没有等待就继续,我可能会向它发送错误的数据(下一个设备的数据等等) for(var i=0;i正在按顺序调用worker.on函数并将其完成。worker.on没有异步。但是,它正在注册一个函数,以便在worker将消息提交回集群时通过其他方式调用 撇开细节不谈,worker.on函数提交匿名函

我需要在for循环中等待,直到调用事件函数为止。 我正在等待子进程的响应,我正在使用
let worker=cluster.fork()创建子进程
我用数组中的特殊消息来回答每个子进程。因此,如果for循环没有等待就继续,我可能会向它发送错误的数据(下一个设备的数据等等)


for(var i=0;i正在按顺序调用
worker.on
函数并将其完成。
worker.on
没有异步。但是,它正在注册一个函数,以便在worker将消息提交回集群时通过其他方式调用

撇开细节不谈,
worker.on
函数提交匿名函数供以后调用。如果担心传递给匿名函数的数据可能会受到迭代的影响,那么我认为您的代码似乎没有问题

您如何声明
worker
变量可能存在问题,因为它是在
if
条件的封闭范围内定义的。但是,您要询问的代码应该如下所示:

//woker.on和worker.send的存根
常数stubWorker={
on:(类型,函数)=>{
log('worker.on called');
设置超时(func,1000);
},
发送:(obj)=>{
log(`objectreceived:${JSON.stringify(obj)}`);
}
};
常数簇={
fork:()=>stubWorker
};
常数数据=[
{deviceId:0,名称:'Device Zero'},
{deviceId:1,名称:'Device One'},
{deviceId:2,名称:'Device Two'},
{deviceId:3,名称:'Device Three'}
];
for(设i=0;i}
不幸的是,我的辅助进程只接收上一次迭代的数据。您的辅助进程使用的是什么库/软件?我使用的是Cluster for node.js,我现在可以使用了。但是我注意到一些其他奇怪的行为。我的辅助进程.send函数中的迭代是无序的。因此,我的最后一个子进程可能是f首先要向我的主进程发送一条消息。有时worker.on内部的交互类似于5、4、3、2、1、0,有时是0、1、2、3、4、5。长话短说:它是有效的,迭代是正确的,但我不知道迭代是如何保存的?每个子进程都会被调用一次,并获得正确的数据。感谢您的清除出事
for(var i=0;i<data.length;i++) {
   if(connected_devices.includes(data[i].deviceID) == false) {
     let worker = cluster.fork();
     connected_devices.push(data[i].deviceID);
   }
   await worker.on('message', function (msg) { // wait untill this function is called then continue for loop
     worker.send({ device: data[i].deviceID, data[i].name});
   }
}