[英]issue using async module in Node.js
遇到問題時,感謝您的幫助。
我正在嘗試將所有異步功能收集在一起。 嘗試了async.parallel,async.each,gather-gm。 沒有任何事情使最終的回調工作。 這是更新的代碼(但仍無法正常工作):
var calls = [];
async.each(parser.allHrefs,function (href,callback) {
getHtml(href,function(err, add){
console.log("Passing data: " + href);
if(err){
return callback(err);
};
if(add){
calls.push(href);
};
return callback();
});
}, function (err) {
if(err){
console.log('something went wrong');
}else{
console.log('finished');
};
});
和第一個功能:
function getHtml(link, callback) {
httpreq.get(link, function(err, res) {
if(err) {
return callback(err);
}
if(res.statusCode >= 300) {
return callback(null, false);
} else {
//cut parsing code here...
return callback(null, true);
}
});
}
ps:我已經更新了幾次代碼。 在此示例中,我嘗試使用async.parallel。 事情是,當我什至沒有出錯時,我仍然沒有到達“ getLocations”功能。 代碼看起來比第一個版本要好得多,但是仍然無法正常工作。
您的gethtml函數中有幾個問題需要解決。
確保現在返回的所有地方都調用回調,例如
return callback(err)
當您想傳達錯誤或
return callback(null, result)
當您想傳達成功並返回結果時。 切勿在未調用回調的情況下返回。
而不是在您通過它時刪除parser.allHrefs
。 您應該重構de getHtml
只是為了知道是否可以添加鏈接。 像這樣:
function getHtml (link, callback) {
httpreq.get(link, function(err, res) {
//the request has already finished executing here
if(err) {
return callback(err);
}
if(res.statusCode >= 300) {
return callback(null,false);
} else {
//cut parsing code here...
return callback(null,true);
}
});
};
這樣,當您調用gatherSecondLevelData
函數時,將檢查是否添加鏈接,如下所示:
function gatherSecondLevelData (err) {
var calls = [];
async.each(parser.allHrefs,function (href,callback) {
getHtml(href,function(err, add){
if(err){
return callback(err);
};
if(add){
calls.push(href);
};
return callback();
});
}, function (err) {
if(err){
console.log('something went wrong');
}else{
console.log('finished');
};
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.