gpt4 book ai didi

javascript - 如何使用循环连接 socket.io 客户端

转载 作者:行者123 更新时间:2023-11-29 20:51:08 25 4
gpt4 key购买 nike

我有许多 socket.io 服务器在迭代端口(端口 4001、4002、4003 等)上服务

我想使用循环将每个套接字客户端连接到相应的服务器:

connectSockets = (sensors) => {
const responses = {};

for (const [idx, sensor] of sensors.entries()) {
const socket = socketIOClient(`${endpointBase}:${port + idx}`);

socket.on(`From::${sensor}`, data => {
responses[sensor] = data
});
}

this.setState({
responses
});
};

当我在循环内中断时:

responses[sensor] = data

我可以看到数据。它甚至被分配给适当的“responses”属性。

但是,当我跳出循环并进入 setState 时,我看到:

responses = {}

不知道为什么。某种范围界定问题?或者也许我对 socket.io 的工作方式感到困惑 - 第一次使用它。有趣的是,当我中断“const socket”时,我得到了预期的 3 次迭代,但是当我中断了“responses[sensor] = data”时,我得到了 3 次以上的迭代。有人有什么想法吗?

最佳答案

好吧,我自己想通了。事实证明这是对 socket.io 工作原理的误解。正如 t.niese 提到的那样,回调是异步的。

我需要做的是在套接字连接中设置状态,因为循环完成时“数据”不一定可用:

  socket.on(`From::${sensor}`, data => {
responses[sensor] = data
this.setState({responses});
});

完美运行。

关于javascript - 如何使用循环连接 socket.io 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51815215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com