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); });