我很难理解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();
}
});发布于 2014-03-16 20:28:58
当您将一个函数作为参数传递时,它称为回调函数,当您通过这个回调函数返回一个值时,该值就是传递函数的一个参数。
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也是回调函数。例如,它发生在单击事件上。
document.body.addEventListener('click', myFunction);它的意思是,首先将操作分配给其他函数,不要考虑这个问题。该操作将在满足条件时执行。
发布于 2014-12-23 10:28:33
我同意你的观点,代码片段中的代码非常不清楚。
您得到的答案是很好的,但是没有一个在您的代码中提到回调的实际使用,我想特别提到这一点。
首先,我将回答你的问题,然后我将详细说明它的复杂性。
答案
原来socket.io正在做一些很酷的事情,这不是我所知道的标准。socket.io将回调从前端传递给后端!
因此,要回答您的问题,what is this callback function -您必须查看您的前端代码。
寻找像这样的代码
socket.emit('new user', data, function( booleanParameter ){
// what are you doing with booleanParameter here?
});我假设在您的示例中,如果添加了新用户(true)或not (False),则true/false值将返回到前端。
或者,如果昵称已经在使用或没有使用,那么前端就可以显示错误字符串。
“基本上,”SumanBogati的回答是正确的,但我觉得由于Socket.IO的特殊待遇,在前端寻找回调的步骤是不够的。
让您的代码更清晰的进一步建议
data的名称更改为nicknamenickname放在套接字上?使用jsdocs解释回调在做什么。
/**
@callback NewUserCallback
@param {boolean} booleanParameter does something..
**/然后讨论函数本身
/**
@parameter {string} nickname
@parameter {NewUserCallback} callback
**/复杂性
通常,在nodejs中,回调希望第一个参数是一个错误,所以读你的代码,上面写着
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如何处理回调?”或者“我们的回调是如何运作的?”
问得好!从中学到了很多东西!
发布于 2014-12-22 18:04:06
我将尝试用一个“具体的”例子来简化(我希望)。
假设我有一个“计算”当前日的函数,每次需要这个函数时,我都会调用该函数(“不要打电话给我们,我们会打电话给您”等等)。
var getCurrentDay = function (callback) {
var currDate = new Date();
callback(currDate, 'err');
});
};
getCurrentDay(function (returnDay) {
logger.info('Today is: ' + returnDay); });https://stackoverflow.com/questions/22442321
复制相似问题