1

所以说我有一个功能:

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']);
    }
  );
}

我需要的是埋在 inline 函数中的 results[0]['url'],所以要么我想从那个函数中取出那个变量,所以我可以用它来返回 grabOldestJob 函数或将另一个函数传递给内联函数,所以我可以使用 results[0]['url'] 作为参数。

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

4

2 回答 2

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
}

看看:了解 node.js 事件循环

于 2012-04-20T01:19:57.120 回答
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

于 2012-04-20T01:09:43.590 回答