所以说我有一个功能:
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提要被解析并且某些位存储在数据库中。我希望使用节点的能力“一次运行很多东西”我将能够获取 - >解析 - >同时保存多个源。任何最佳实践提示也将非常感激。
答案 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
}
答案 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 。