Javascript 正在尝试解码node.js代码中的单词“callback”
我是node.js的新手,遇到了这段代码,我试图理解回调这个词在做什么。我的意思是我知道回调是什么,但是为什么他们在下面使用回调这个词,它在做什么。非常感谢你的帮助Javascript 正在尝试解码node.js代码中的单词“callback”,javascript,node.js,Javascript,Node.js,我是node.js的新手,遇到了这段代码,我试图理解回调这个词在做什么。我的意思是我知道回调是什么,但是为什么他们在下面使用回调这个词,它在做什么。非常感谢你的帮助 io.sockets.on('connection', function(socket) { socket.on('nickname', function(data, callback) { if (nicknames.indexOf(data) != -1) { callback(f
io.sockets.on('connection', function(socket) {
socket.on('nickname', function(data, callback) {
if (nicknames.indexOf(data) != -1) {
callback(false);
} else {
callback(true);
nicknames.push(data);
socket.nickname = data;
console.log('Nicknames are ' + nicknames);
}
});
});
在Node.js中,callback是回调函数事实上的标准名称。你可以很容易地称之为bob,它会产生同样的效果:
io.sockets.on('connection', function(socket) {
socket.on('nickname', function(data, bob) {
if (nicknames.indexOf(data) != -1) {
bob(false);
} else {
bob(true);
nicknames.push(data);
socket.nickname = data;
console.log('Nicknames are ' + nicknames);
}
});
});
至于它在做什么,可以把它看作是一个匿名函数,它像父函数一样通知调用方被调用函数已经完成。一个简单的例子是:
函数A调用函数B,这需要很长时间才能运行。当B完成时,它需要告诉A它完成了:
function a() {
b(someParameter, function(err, data) {
// function(err, data) is the anonymous function we pass as a parameter to b()
});
}
function b(someParemeter, callback) {
// do something that takes a while
// 'callback' is the variable name for the anonymous function that was passed
// We execute it using ():
callback(err, data);
}
这是一个变量名
它在函数表达式中定义为一个参数:函数数据,回调{
期望传递给它的值将是一个函数,因此这里调用的函数是:callbackalse
对于一个不依赖于任何您看不到的库代码的简单示例:
函数doSomethingcallback{
警觉地做某事;
回调1;
}
函数myCallbackvalue{
使用参数:+值调用alertmyCallback;
}
doSomethingmyCallback;Node.js使用异步回调函数,而不是阻塞调用者并同步执行操作。回调只是为保存回调函数的变量指定的非常常见的名称。我通常在自己的代码中命名变量,因为它较短。假设是这样的,该回调用于在触发“昵称”事件时响应客户端 从 发送和获取数据确认 有时,您可能希望在客户端确认后得到回调 信息接收 为此,只需传递一个函数作为.send或的最后一个参数 .emit。此外,当您使用.emit时,确认由 您可以,这意味着您还可以传递数据: 服务器app.js
var io = require('socket.io')(80);
io.on('connection', function (socket) {
socket.on('ferret', function (name, fn) {
fn('woot');
});
});
Client index.html
<script>
var socket = io(); // TIP: io() with no args does auto-discovery
socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
socket.emit('ferret', 'tobi', function (data) {
console.log(data); // data will be 'woot'
});
});
</script>
但是函数数据,bob是回调函数。为什么在回调函数中包含callback或bob。这有意义吗?是的,我们在答案中添加了更多内容。现在看。没有问题!节点的回调语法可以让任何人不费吹灰之力就看到;问题:在我的示例中,单词callback包含回调函数数据的结果,callback?callback表示回调函数本身,您可以在该上下文中调用它。可以通过执行var output=callbackQuestion来检索结果:关于我的示例,callbackbalse表示functiondata的结果,callback是false。这听起来对吗?不,它将是未定义的,因为函数不返回任何内容。Whe如果执行回调,则库可能会向web客户端发送一条值为true或false的消息。