如何正确使用 async 与多个依赖函数...
这是我的尝试,但没有成功,它在 async.waterfall 函数中:
function (urlsCreated, cb) {
var z, artist, title, added_on;
z = [];
async.mapSeries(urlsCreated, function (url, next) {
scrape_music.total_pages(50, url, function (array, total, extra) {
scrape_music.each(artist, title, added_on, array, url, function (result) {
});
});
}, function (z) {
console.log(z);
});
}
到目前为止,一切都很好......
基本上 urlsCreated 是一个包含 2 个 url 的数组...
然后我调用了一个 mapSeries 假设它会在它们之间迭代......
它应该工作的方式是,它遍历数组中的每个 url,然后对于每个 url,它应该获得该 url 的总页数,然后对于添加到 total_pages 的数组参数/回调的每个页数, 应该在...内迭代
所以基本上数组是:urlsCreated(包含2个链接)->数组(包含total_pages方法中的总页数)->结果(.each方法应该抓取每个页面,预先包含在数组中的页数)然后重复对于 urlsCreated 中的 url 数量...
任何帮助都会很棒,目前没有为 z 打印任何内容,基本上我只想要一个填充了从 scrape_music.each 的结果中返回的对象的数组。
编辑----
这是这些功能的代码。
//loop thrugh each page and find jquery elements that match
Scrape.prototype.each = function (artist, title, added_on, array, urls, cb) {
console.log('entered each');
console.log(array);
var $trs, list;
list = [];
this.page(array, urls, function ($page) {
//$trs selects all the rows from 1-50
$trs = $page('tr').slice(11, -3);
$trs.map(function (i, item) {
var result;
result = {};
result.artist = $page(item).find('td').eq(1).text();
result.title = $page(item).find('td').eq(2).text();
result.added_on = $page(item).find('td').eq(3).text();
list.push(result);
});
cb(list);
});
};
Scrape.prototype.total_pages = function (divide, url, cb) {
return request("" + url + config.url.pageQ + 0, function (err, res, body) {
if (err) { throw err; }
var page, select, match, total, matches, array, extra;
array = [];
page = cheerio.load(body);
select = page('tr').slice(9, 10);
match = page(select).find('td').eq(1).text();
matches = match.slice(-18, -14).trim();
total = Math.round(matches / divide);
extra = matches % divide;
for(x = 0; x < total; x++) {
array.push(x);
}
cb(array, total, extra);
});
};
//used to loop through all pages
Scrape.prototype.page = function (array, urls, cb) {
return array.forEach(function (i) {
return request("" + urls + config.url.pageQ + i, function (err, res, body) {
//console.log(urls + config.url.pageQ + i);
if (err) { throw err; }
cb(cheerio.load(body));
});
});
};