Node.js 中使用异步模块的问题
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);
}
});
}
p.s.:我已经更新了几次代码。在这个例子中,我尝试使用 async.parallel。问题是即使我没有出错,我仍然没有进入 "getLocations" 函数。代码看起来比第一个版本好得多,但仍然无法正常工作。
您的 gethtml 函数中有几个问题需要修复。
确保现在 return 在任何地方都可以调用回调,例如
return callback(err)
当您想传达错误或
return callback(null, result)
当您想传达成功和 return 结果时。永远不要 return 不调用回调。
而不是在浏览时删除 parser.allHrefs
。您应该重构 de getHtml
以了解是否可以添加 link。像这样:
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
函数时,您会检查是否添加 link 或不像这样:
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');
};
});
};
遇到问题,感谢您的帮助。
我正在尝试将所有异步函数集中在一起。 尝试了 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);
}
});
}
p.s.:我已经更新了几次代码。在这个例子中,我尝试使用 async.parallel。问题是即使我没有出错,我仍然没有进入 "getLocations" 函数。代码看起来比第一个版本好得多,但仍然无法正常工作。
您的 gethtml 函数中有几个问题需要修复。
确保现在 return 在任何地方都可以调用回调,例如
return callback(err)
当您想传达错误或
return callback(null, result)
当您想传达成功和 return 结果时。永远不要 return 不调用回调。
而不是在浏览时删除 parser.allHrefs
。您应该重构 de getHtml
以了解是否可以添加 link。像这样:
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
函数时,您会检查是否添加 link 或不像这样:
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');
};
});
};