如果没有.once调用,这将起作用。
我正在尝试从服务器端代码发送一条消息
io.on('connect', function (socket) {
socket.once('connect', function() {
socket.emit('mydata', { feed: result});
但是除非删除第二行,否则我什么都不会在客户端得到。我也尝试过socket.once('mydata',{feed:result})但:
throw new TypeError('listener must be a function');
Run Code Online (Sandbox Code Playgroud)
换句话说,只有当存在新的“ mydata”时,如何才能将消息发送到客户端?
谢谢
首先,.once()仅适用于事件侦听器-当您只想在下次事件发生时通知您,而不是在事件的后续发生时通知您。它与发送消息无关。
您的特定代码试图执行的操作实际上没有任何意义。您正在参加connect活动,并且正在尝试收听其他connect活动?如果您更完整地描述您要完成的工作,这将有所帮助?“仅当有新的mydata时才意味着什么”?如何判断是否有新的mydata?
如果您只是尝试发送mydata消息,则在客户端首次连接时,您可以执行以下操作:
io.on('connect', function(socket) {
socket.emit('mydata', { feed: result });
}
Run Code Online (Sandbox Code Playgroud)
如果您试图确保即使在同一套接字上重新连接,也只向连接发送一次此消息,则可以执行以下操作:
io.on('connect', function(socket) {
if (!socket.sentMydata) {
socket.emit('mydata', { feed: result });
socket.sentMydata = true;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想确保此客户端仅发送一次此消息,即使重新加载页面或客户端导航后退,那么您将必须使用持久性标记,例如cookie或某些会话ID或类似的东西。
| 归档时间: |
|
| 查看次数: |
7751 次 |
| 最近记录: |