我同意你的看法,代码片段中的代码很不清楚。
你得到的答案很好,但是没有一个涉及你的代码中回调的实际使用,我想特别引用它。
我先回答你的问题,然后再详细说明它的复杂性。
答案
事实证明,socket.io 正在做一些非常酷的事情,这不是我所知道的标准......
socket.io 正在将回调从前端传递到后端!
所以要回答你的问题what is this callback function
- 你必须看看你的前端代码。
寻找看起来像这样的代码
socket.emit('new user', data, function( booleanParameter ){
// what are you doing with booleanParameter here?
});
我假设在您的情况下,如果添加了新用户(真)或不添加(假),则真/假值将传递回前端。
或者,如果昵称已经被使用,那么前端可以显示一个错误字符串,如果它是..
基本上,@SumanBogati 的回答是正确的,但由于 socket.io 的特殊处理,我觉得它缺少在前端找到回调的步骤。
进一步的建议让你的代码更清晰
- 将参数名称更改
data
为nickname
- 添加评论 - 你为什么要放在
nickname
套接字上?
- 添加文档
使用 jsdocs 解释回调在做什么
/**
@callback NewUserCallback
@param {boolean} booleanParameter does something..
**/
然后在函数本身
/**
@parameter {string} nickname
@parameter {NewUserCallback} callback
**/
复杂性
通常,在 nodejs 中,回调期望第一个参数是一个错误,所以阅读你的代码,它说
socket.on('new user', function(data, callback){
if (nicknames.indexOf(data) != -1){
///// THERE IS NO ERROR
callback(false);
}else{
///// THERE IS AN ERROR
callback(true);
/// do more stuff after the error
socket.nickname = data;
nicknames.push(socket.nickname);
updateUserList();
}
});
不是你期望的模式,是吗?我想这就是你问这个问题的原因。
问题仍然是 socket.io 的回调意味着什么,对吗?也许他们的回调不希望错误作为第一个参数。
我从未使用过 socket.io,我也找不到文档来澄清这一点。所以我不得不下载他们的聊天示例并调试它 ==> 所以我给出的答案是,他们正在将函数从前端传递到后端。
Socket.io 绝对应该在他们的文档中以大字体强调这一点,标题为“socket.io 如何处理回调?” 或“我们的回调如何工作?”。
好问题!从中学到了很多!