我试图从我的客户端发出自定义消息。我需要对其成功和失败采取一些行动。现在,我如何将成功回调附加到emit方法?
对于错误回调,我使用了Exposed events doc并使其正常工作
socket.on('error', () -> console.log("Error Occured"))
为了成功,我试过
socket.emit('my custom method', {content: json},() -> console.log("Emitted"))
无论是成功还是失败,都不会触发此回调。
我如何获得成功处理程序?
答案 0 :(得分:61)
如果您查看文档,它会向您显示一个传递回调函数的示例 - 最后一个示例:http://socket.io/docs/#Sending-and-getting-data-acknowledgements
实施例 服务器:
socket.on('formData',
function(data, fn){
// data is your form data from the client side
// we are here so we got it successfully so call client callback
// incidentally(not needed in this case) send back data value true
fn(true);
}
);
客户端:
socket.emit('formData',
data,
function(confirmation){
// send data
// know we got it once the server calls this callback
// note -in this ex we dont need to send back any data
// - could just have called fn() at server side
console.log(confirmation);
}
);
答案 1 :(得分:15)
你的第二个代码没有做任何事情的原因是因为socketIO中的暴露事件只是为socket.on
方法定义的。因此,您需要在服务器app.js中添加另一个emit来完成此操作
客户端会发出自定义消息并通过socket.emit将JSON数据发送到套接字,同时他还会获得一个处理成功回调的更新函数
socket.emit ('message', {hello: 'world'});
socket.on ('messageSuccess', function (data) {
//do stuff here
});
服务器端从客户端获取来自消息emit的调用,并将messageSuccess发送回客户端
socket.on ('message', function (data) {
io.sockets.emit ('messageSuccess', data);
});
您可能可以使模块不受此行为影响,因此您可以为每个要以此方式处理的邮件附加此模块。