这可以在没有.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');
换句话说,只有当有新的“mydata”时,如何才能向客户端发送消息?
由于
答案 0 :(得分:3)
首先,.once()
仅适用于事件侦听器 - 当您只希望在下次发生事件时收到通知,而不是随后发生事件。它与发送消息无关。
您的具体代码尝试做的事情并没有多大意义。您正处于connect
事件中并且您正在尝试收听另一个connect
事件?如果你更完整地描述了你想要完成的事情,那会有所帮助吗?什么"只有当有新的mydata意味着"?如何判断是否有新的mydata?
如果您只是尝试发送mydata
消息,那么当客户端首次连接时,您可以这样做:
io.on('connect', function(socket) {
socket.emit('mydata', { feed: result });
}
如果您尝试确保仅将此消息发送到连接,即使在同一套接字上重新连接,也可以执行以下操作:
io.on('connect', function(socket) {
if (!socket.sentMydata) {
socket.emit('mydata', { feed: result });
socket.sentMydata = true;
}
}
如果您想确保此客户端只发送一次此消息,即使重新加载页面或客户端导航并返回,那么您将不得不使用持久性标记,如cookie或某个会话ID或类似的东西。
答案 1 :(得分:0)
我不确定我是否完全理解你的问题,但你可以使用映射。
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="27%" align="left" valign="top">
<span class="param">Text0</span> 23<br />
<span class="param">Text1</span> 173<br />
<span class="param">Text2</span> 54<br />
<span class="param">Text3</span> 2<br /><br />
</td>
<td width="27%" align="left" valign="top">
<span class="param">Text4</span><br />
one <br />
two <br />
three <br />
</td>
<td width="46%" align="left" valign="top">
<span class="param">Text5</span><br />
one -<br />
two -<br />
three -<br />
</td>
</tr>
</table>