如何从内联函数中获取变量

时间:2012-04-20 00:50:29

标签: node.js

所以说我有一个功能:

function grabOldestJob() {
  var client = mysql.createClient({
    user: dbConfig['USER'],
    password: dbConfig['PASS'],
  });

  client.query('USE '+dbConfig['DATABASE']);

  client.query('SELECT url FROM '+dbConfig['JOB_TABLE']+' ORDER BY added ASC LIMIT 1 ',
    function selectCb(err, results, fields, passed) {
      if (err) {
        throw err;
      }
      client.end();
      fetchFeed(results[0]['url']);
    }
  );
}

我需要的是结果[0] ['url']隐藏在内联函数中,所以要么我想从该函数中获取该变量,所以我可以使用它来返回grabOldestJob函数或传递另一个函数函数到内联函数,所以我可以使用结果[0] ['url']作为参数。

我对node.js的概念很新,并希望尽可能使我的代码“正确”。此函数是进程中的第一个函数,它从数据库中提取url,传递它以从远程服务器获取,xml提要被解析并且某些位存储在数据库中。我希望使用节点的能力“一次运行很多东西”我将能够获取 - >解析 - >同时保存多个源。任何最佳实践提示也将非常感激。

2 个答案:

答案 0 :(得分:1)

使用回调函数。

就像client.query(query,callback)函数一样。传入数据和回调函数,如果处理完成则调用该函数。对fetchFeed(url,callback)函数执行相同的操作。

...
client.end();
fetchFeed(results[0]['url'],function(result){
    // here 'result' contains the fetched feed and can be stored into the database
});
...

function fetchFeed(url,cb){
    // download feed here and call cb(downloaded_data) when finished, passing the downloaded data to the cb() function
}

查看:Understanding the node.js event loop

答案 1 :(得分:0)

外部作用域中定义的每个变量在外部作用域的内部作用域中可见。这基本上意味着当您使用关键字'var'在函数中定义变量时,它将对任何嵌套函数可见。另一方面,当您定义一个没有'var'关键字的变量时,它将在全局范围内可见。这是一个例子:

(function () {
  var v = 5;

  (function () {
    v = 3;
  })();

  console.log(v);
})();

这将打印出 3 。因此,如果你想让一个参数在内部函数之外可见,你必须将它(不确定引用,因为变量可能会被垃圾收集?)到一个全局变量中。喜欢这个

(function () {
  var v = 5;

  (function (n) {
    v = n;
  })(42);

  console.log(v);
})();

这将打印出 42