Javascript 在for循环中等待事件函数
我需要在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函数提交匿名函
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});
}
}