callback函数的例子
我很难理解如何在下面的代码块中使用callback()
函数。 当function callback{}
没有被定义时,我们如何在函数体中使用callback()
作为函数? 在下面的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(); } });
当您将一个函数作为parameter passing时,它被称为callback函数,当您通过此callback函数返回一个值时,该值是传递函数的参数。
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"); } });
基本上callback()用于asynchronous概念。 它在特定事件上被调用。
myFunction
也是callback函数。 例如,它发生在点击事件上。
document.body.addEventListener('click', myFunction);
这意味着将行动分配给其他function,不要考虑这一点。 当条件满足时,动作将被执行。
我同意你的看法,代码片段很不清楚。
你得到的答案是很好的,但是没有一个引用你的代码中实际使用的callback函数,我想具体参考。
首先,我会回答你的问题,然后我会详细说明它的复杂性。
答案
事实上,socket.io正在做一些非常酷的事情,这不是我所知道的标准。socket.io正在将callback从前端传递给后端!
所以要回答你的问题what is this callback function
– 你必须看看你的前端代码。
寻找看起来像这样的代码
socket.emit('new user', data, function( booleanParameter ){ // what are you doing with booleanParameter here? });
我假设在你的情况下,如果新用户被添加(真)或不(假),则真/假值将被传回到前端。
或者,也许如果昵称已被使用或没有,以便前端可以显示错误string,如果是..
基本上,@SumanBogati的回答是正确的,但是由于socket.io的特殊处理,我觉得没有find前端callback的步骤。
进一步的build议为了使你的代码更清晰
- 将参数
data
名称更改为nickname
- 添加评论 – 为什么你在套接字上放置
nickname
? - 添加文档
使用jsdocs来解释callback在做什么
/** @callback NewUserCallback @param {boolean} booleanParameter does something.. **/
然后在函数本身
/** @parameter {string} nickname @parameter {NewUserCallback} callback **/
复杂性
通常,在nodejs中,callback期望第一个参数是一个错误 ,所以读取你的代码,它说
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的callback是什么意思,对吧? 也许他们的callback不会把错误当作第一个参数。
我从来没有使用过socket.io,我无法find一个文件来澄清这一点。 所以我不得不下载他们的聊天例子,并debugging==>,所以我给出的答案是,他们将function从前端传递到后端。
在一个名为“socket.io如何处理callback?”的标题下,Socket.io应该在他们的文档中以大字体强调这一点。 或者“我们的callback是如何工作的?”。
好问题! 从中学到很多东西!
我会尽量简化一个“具体”的例子(我希望)。
比方说,我有一个“计算”当天的函数,每当我需要当前的日子(“不要打电话给我们,我们会打电话给你”),我会调用这个函数。
var getCurrentDay = function (callback) { var currDate = new Date(); callback(currDate, 'err'); }); }; getCurrentDay(function (returnDay) { logger.info('Today is: ' + returnDay); });