nodejs回调不了解回调结果是如何通过参数得出的

时间:2015-06-30 22:30:03

标签: javascript node.js

看到并运行下面的代码,以为我理解闭包......怎么样#avatarUrl'在回调参数中也收到了#avatar'这也是函数参数。我知道这是常见的模式,但还不能得到它

var GitHubApi = require('github');
var github = new GitHubApi({
version: '3.0.0'
});

var getUserAvataWithCallback = function(user, callback) {
    github.search.users({q: user}, function(err,res) {
        if (err) { callback(err, null);}
        else {
            var avatarUrl = res.items[0].avatar_url;
            callback(null, avatarUrl);
         }
    });
};


getUserAvataWithCallback('irom77', function(err,avatar) {
    console.log('got url with callback pattern', avatar);
})

2 个答案:

答案 0 :(得分:1)

传递给函数的参数的名称不需要是函数定义中的参数的名称,定义中的参数是将在给定函数的范围内初始化的变量的名称。参数声明将接收在函数调用的第二个位置传递的值(根据您提供的代码),您将能够使用该名称在范围内访问它。你可以:

function foo(arg1, arg2) {
    console.log(arg1, arg2);
}

foo(true, true); // will output true, true
foo(0, 1); //will output 0, 1
foo('shikaka', 1); //will output "shikaka", 1

var bar = "shikaka";
foo(bar, "shikaka"); //will output "shikaka", "shikaka"

答案 1 :(得分:1)

因此,回调是javascript中的基础和整体概念,因此了解一些概念非常重要。看看这个例子:

// This is the function definition for "foo"

//here the callback argument refers to
//the second argument in the function call at
//the bottom which is a function

var foo = function(arg, callback) {
  
  if(arg%2 != 0)
    callback("arg is odd", arg)
    
  else
    callback(null, arg)
}
//Function call to foo
foo(2, function(err, num) {
  if(err)
    console.log(err)
  else
    console.log(num)
}

因此,在上面的示例中,您可以将函数调用视为具有两个参数的调用,即整数2和函数。

在函数定义中:

整数称为“arg”,该函数称为“回调”。

  1. 当执行回调(“arg为odd”,arg)时,调用该函数:

    • err =“arg is odd”
    • num = arg
  2. 执行回调(null,arg)时,将使用以下函数调用该函数:

    • err = null
    • num = arg
  3. 这里需要记住的重要一点是,在javascript中,函数可以作为参数传递给其他函数。进一步阅读here