Anc*_*end 22 javascript jquery callback node.js socket.io
我很难理解callback()在以下代码块中如何使用该函数.我们如何callback()在函数体中使用函数,何时function callback{}尚未定义?将true/false作为参数传递给下面的回调函数的代表是什么?
我感谢任何澄清,提前谢谢!
socket.on('new user', function(data, callback){
if (nicknames.indexOf(data) != -1){
callback(false);
}else{
callback(true);
socket.nickname = data;
nicknames.push(socket.nickname);
updateUserList();
}
});
Run Code Online (Sandbox Code Playgroud)
Sum*_*ati 27
当您将函数作为参数传递时,它被称为回调函数,当您通过此回调函数返回值时,该值是传递函数的参数.
function myFunction(val, callback){
if(val == 1){
callback(true);
}else{
callback(false);
}
}
myFunction(0,
//the true or false are passed from callback()
//is getting here as bool
// the anonymous function below defines the functionality of the callback
function (bool){
if(bool){
alert("do stuff for when value is true");
}else {
//this condition is satisfied as 0 passed
alert("do stuff for when value is false");
}
});
Run Code Online (Sandbox Code Playgroud)
基本上,callbacks()用于异步概念.它是在特定事件上调用的.
myFunction也是回调函数.例如,它发生在单击事件上.
document.body.addEventListener('click', myFunction);
Run Code Online (Sandbox Code Playgroud)
这意味着,首先将动作分配给其他功能,而不要考虑这一点.满足条件时将执行操作.
我同意你的看法,代码片段中的代码很不清楚。
你得到的答案很好,但是没有一个涉及你的代码中回调的实际使用,我想特别引用它。
我先回答你的问题,然后再详细说明它的复杂性。
事实证明,socket.io 正在做一些非常酷的事情,这不是我所知道的标准...... socket.io 正在将回调从前端传递到后端!
所以要回答你的问题what is this callback function- 你必须看看你的前端代码。
寻找看起来像这样的代码
socket.emit('new user', data, function( booleanParameter ){
// what are you doing with booleanParameter here?
});
Run Code Online (Sandbox Code Playgroud)
我假设在您的情况下,真/假值意味着如果添加了新用户(真)或不添加(假),则返回到前端。
或者,如果昵称已经被使用,那么前端可以显示一个错误字符串,如果它是..
基本上,@SumanBogati 的回答是正确的,但由于 socket.io 的特殊处理,我觉得它缺少在前端找到回调的步骤。
data为nicknamenickname套接字上?使用 jsdocs 解释回调在做什么
/**
@callback NewUserCallback
@param {boolean} booleanParameter does something..
**/
Run Code Online (Sandbox Code Playgroud)
然后在函数本身
/**
@parameter {string} nickname
@parameter {NewUserCallback} callback
**/
Run Code Online (Sandbox Code Playgroud)
通常,在 nodejs 中,回调期望第一个参数为 error,因此阅读您的代码,它说
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();
}
});
Run Code Online (Sandbox Code Playgroud)
不是你期望的模式,是吗?我想这就是你问这个问题的原因。
问题仍然是 socket.io 的回调意味着什么,对吗?也许他们的回调不希望错误作为第一个参数。
我从未使用过 socket.io,我也找不到文档来澄清这一点。所以我不得不下载他们的聊天示例并调试它 ==> 所以我给出的答案是,他们正在将函数从前端传递到后端。
Socket.io 绝对应该在他们的文档中以大字体强调这一点,标题为“socket.io 如何处理回调?” 或“我们的回调如何工作?”。
好问题!从中学到了很多!