首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回调函数示例

回调函数示例
EN

Stack Overflow用户
提问于 2014-03-16 20:11:23
回答 9查看 45.5K关注 0票数 27

我很难理解callback()函数是如何在下面的代码块中使用的。

在尚未定义callback()的情况下,如何将function callback()作为函数在函数体中使用?

将true / false作为参数传递到下面的回调函数会产生什么影响?

非常感谢您的澄清,谢谢!

代码语言:javascript
复制
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();
    }
});
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2014-03-16 20:28:58

当您将一个函数作为参数传递时,它称为回调函数,当您通过这个回调函数返回一个值时,该值就是传递函数的一个参数。

代码语言:javascript
复制
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");
    }
});

基本上,回调()用于异步概念。它在特定事件上被调用。

myFunction也是回调函数。例如,它发生在单击事件上。

代码语言:javascript
复制
document.body.addEventListener('click', myFunction);

它的意思是,首先将操作分配给其他函数,不要考虑这个问题。该操作将在满足条件时执行。

票数 35
EN

Stack Overflow用户

发布于 2014-12-23 10:28:33

我同意你的观点,代码片段中的代码非常不清楚。

您得到的答案是很好的,但是没有一个在您的代码中提到回调的实际使用,我想特别提到这一点。

首先,我将回答你的问题,然后我将详细说明它的复杂性。

答案

原来socket.io正在做一些很酷的事情,这不是我所知道的标准。socket.io将回调从前端传递给后端!

因此,要回答您的问题,what is this callback function -您必须查看您的前端代码。

寻找像这样的代码

代码语言:javascript
复制
  socket.emit('new user', data, function( booleanParameter ){
        // what are you doing with booleanParameter here?
  });

我假设在您的示例中,如果添加了新用户(true)或not (False),则true/false值将返回到前端。

或者,如果昵称已经在使用或没有使用,那么前端就可以显示错误字符串。

“基本上,”SumanBogati的回答是正确的,但我觉得由于Socket.IO的特殊待遇,在前端寻找回调的步骤是不够的。

让您的代码更清晰的进一步建议

  • 将参数data的名称更改为nickname
  • 添加注释--为什么要将nickname放在套接字上?
  • 添加文档

使用jsdocs解释回调在做什么。

代码语言:javascript
复制
/**

     @callback NewUserCallback 
     @param {boolean} booleanParameter does something.. 

**/

然后讨论函数本身

代码语言:javascript
复制
/**
     @parameter {string} nickname 
     @parameter {NewUserCallback} callback
**/

复杂性

通常,在nodejs中,回调希望第一个参数是一个错误,所以读你的代码,上面写着

代码语言:javascript
复制
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如何处理回调?”或者“我们的回调是如何运作的?”

问得好!从中学到了很多东西!

票数 5
EN

Stack Overflow用户

发布于 2014-12-22 18:04:06

我将尝试用一个“具体的”例子来简化(我希望)。

假设我有一个“计算”当前日的函数,每次需要这个函数时,我都会调用该函数(“不要打电话给我们,我们会打电话给您”等等)。

代码语言:javascript
复制
var getCurrentDay = function (callback) {
    var currDate = new Date();        
    callback(currDate, 'err');
   });
};




getCurrentDay(function (returnDay) {         
    logger.info('Today is: ' + returnDay); });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22442321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档