Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在尝试解码node.js代码中的单词“callback”_Javascript_Node.js - Fatal编程技术网

Javascript 正在尝试解码node.js代码中的单词“callback”

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

我是node.js的新手,遇到了这段代码,我试图理解回调这个词在做什么。我的意思是我知道回调是什么,但是为什么他们在下面使用回调这个词,它在做什么。非常感谢你的帮助

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的消息。