我已用實際代碼更新了帖子。從回調中調用函數會導致節點應用程序掛起
問題是節點應用程序掛起並不會退出,除非我在addArticle中註釋掉查詢。我很想知道我在這裏做錯了什麼(關於懸掛問題)。
function addArticle(title, text, date, link) {
connection.query("SELECT * FROM articles WHERE link LIKE "+connection.escape(link), function(error, rows, fields) {
if(rows.length == 0) {
console.log("article not in database");
console.log(connection.escape(title));
var values = [connection.escape(title), connection.escape(text), date, connection.escape(link), '{}'];
connection.query("INSERT INTO articles (title, text, date, link, topics) VALUES ?", [[values]], function(err) {
if(err) throw err;
});
}
});
}
function scrapeReuters() {
var url = 'http://www.reuters.com/news/archive/technologyNews?date=10092013';
request(url, function(err, resp, body){
$ = cheerio.load(body);
links = $('a');
$(links).each(function(i, link){
var addr = $(link).attr('href');
if(addr != undefined && addr.indexOf('article') != -1 && addr.indexOf('http') == -1) {
var full_link = "http://www.reuters.com"+addr;
var title = $(link).text();
request(full_link, function(err, resp, body){
$ = cheerio.load(body);
para = $('p').text();
addArticle(title, para,new Date().getTime(), full_link);
});
}
});
});
}
什麼是'foo'之後呢?你可以做一些'console.log'來查看你的控制流向哪裏? – Bergi
'c'是'foo'中的回調函數嗎?如果是這樣,你需要在回調'connection.query'中調用'c()'。您需要提供較少的神祕功能/參數名稱以獲得更有用的評論或答案。 –