回调函数示例

2021/01/26 19:31 · jquery ·  · 0评论

我很难理解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();
    }
});

当您将函数作为参数传递时,它称为回调函数,并且当您通过此回调函数返回值时,该值就是所传递函数的参数。

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

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

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

document.body.addEventListener('click', myFunction);

这意味着,首先将动作分配给其他功能,然后再考虑一下。满足条件时将执行该操作。

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

您得到的答案很好,但是没有一个涉及到代码中回调的实际使用,我想具体参考一下。

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

答案

事实证明socket.io所做的事情很酷,这不是我所知道的标准..
socket.io正在将回调从前端传递到后端!

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

寻找看起来像这样的代码

  socket.emit('new user', data, function( booleanParameter ){
        // what are you doing with booleanParameter here?
  });

我假设在您的情况下,如果添加了新用户,则true / false值应传递回前端(true)或不添加(false)。

或者,如果昵称已被使用或未使用,则前端可以显示一个错误字符串。

基本上,@ SumanBogati的回答是正确的,但是由于socket.io的特殊处理,我觉得它缺少在前端查找回调的步骤。

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

  • 将参数名称更改datanickname
  • 添加评论-为什么要放在nickname套接字上?
  • 添加文件

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

/**

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

**/

然后在功能本身上

/**
     @parameter {string} nickname 
     @parameter {NewUserCallback} callback
**/

复杂性

通常,在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();
    }
});

不是您期望的模式,对吗?我想这就是为什么你问这个问题。

问题仍然是socket.io的回调是什么意思,对吗?也许他们的回调并不期望将错误作为第一个参数。

我从未使用过socket.io,也无法找到文档来阐明这一点。因此,我不得不下载他们的聊天示例并调试==>,因此我给出的答案是,他们将功能从前端传递到后端。

Socket.io绝对应该在其文档的标题为“ socket.io如何处理回调?”的情况下以大字体强调这一点。或“我们的回调如何工作?”。

好问题!从中学到了很多!

我将尝试使用“具体”示例进行简化(我希望如此)。

假设我有一个“计算”当日的函数,而我将在需要当日的每一次调用该函数(“不要打电话给我们,我们会打电话给您”或其他方式)。

var getCurrentDay = function (callback) {
    var currDate = new Date();        
    callback(currDate, 'err');
   });
};




getCurrentDay(function (returnDay) {         
    logger.info('Today is: ' + returnDay); });

回调函数是一个作为参数传递给另一个函数(称为另一个函数“ otherFunction”)的函数,该回调函数在otherFunction内部被调用(或执行)。

这是我回调函数的简单示例

// callback add
function add(a, b){
  console.log(a+b);
}

// Main function
function getInput(cb) {
  c = 5+5;
  d = 6+6;
  if (typeof cb === 'function') {
    cb(c, d);
  }
}

getInput(add)

有关详细说明,请参阅此链接

无需过多考虑,请参见以下示例。在下面的示例中,我只是printadd函数中调用函数。

function print( ans ){
    console.log(ans) ; // 7
}
function add(a, b){
    print(a+b) ;
}

add(2,5);

如果我使用print函数作为参数怎么办?在不使用print全局作用域的print函数的情况下,我只是将函数作为参数传递

function print( ans ){
    console.log(ans) ; // 7
}
function add(a, b, callback){ // here callback = print
    callback(a+b) ;
}
add(2,5,print); // print function as a parameter 

通常,JavaScript允许将功能用作参数。

因此,任何作为参数传递的函数都称为回调函数。我认为现在回调对您来说是可以理解的。

回调函数意味着一个接一个的调用:)

doHomeWork('math',alertMsg);

在上面的行中说1.呼叫doHomeWork,然后呼叫2. alertMsg,就这样。:)

function doHomeWork(subject,callback){
  console.info("study: "+subject);
  callback();
}

alertMsg = function(){
  console.info("alert");
}

doHomeWork('math',alertMsg);

输出:

study: math
alert

回调是由另一个函数使用参数调用的任何函数

这是一个查询,假设您考虑程序员通常如何写入文件:

- `fileObject = open(file)` //now that we have to wait for the file to open, after that we can write to this file*



 - fileObject.write("We are writing to the file.") // but i want to write , not wait

这种情况-回调很有用:

//we can pass **writeToFile()** (a callback function) to the open file function

 - fileObject = open(file, writeToFile)

//执行继续进行-我们不等待文件打开

//一旦打开文件,我们就可以写入文件,但是在等待时,我们可以做其他事情

函数内部的函数称为回调函数。或者说,存在于父函数内部的内部函数称为回调函数。

如果要在task1之后完成task2。然后,您可以将task2作为回调,它将异步运行

这是一个易于理解回调函数用法的示例。

  • 一种登录功能,用于异步执行与服务器的用户登录。
  • 由于异步调用,一旦从服务器收到日期,我们就需要获取登录结果。
    const axios = require('axios');

    function login(loginData,callbackSuccess,callBackFailure)  {
      axios
      .post("/api/login",loginData)
      .then((response) => {
        callbackSuccess(response);
      })
      .catch((error) => {
        callBackFailure(error);
      });
    }
    
    function callbackSuccess(data) {
      console.log("Login response :",data);
    }
    
    function callBackFailure(error) {
      console.log("Login failed :",error);
    }
    
    let userData = {
      username : "test",
      password : "abcd123"
    }
    
    login(userData,callbackSuccess,callBackFailure);
本文地址:http://jquery.askforanswer.com/huidiaohanshushili.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!