RSS URL を要求し、リンクを解析してから、各リンクを要求する必要があるプロミス チェーンがあります。最初の部分はうまく機能します。ただし、解析された各リンクを要求する「約束を挿入する」方法を理解するのに苦労しています。
リンク URL の単純な配列を生成することから始めましたが (推奨される方法)、それを機能させることができませんでした。このコードは、各 URL を要求するプロミスの配列を生成するようになりましたが、それを機能させる方法もわかりません。おそらく私はQ.all()を使用する必要がありますが、それは所定の機能のためのようですか?
requestRss(rssSourceUrl)
.then(function(links) {
// ???
})
.catch(function(error) {
console.log(error);
})
.done();
function requestRss(url) {
var deferred = q.defer();
request(url, function(err, resp, body) {
if (err || resp.statusCode !== 200) {
deferred.reject(new Error(resp.statusCode + ' ' + err + ' ' + body));
} else {
$ = cheerio.load(body);
var linkRegex = /<link>([^<$]+)/gim;
var someLinks = new Array();
$('item').each(function() {
var match = linkRegex.exec($(this).html());
if (match) {
var link = match[1];
someLinks.push(
function() { requestSomeLink(link); }
);
}
});
deferred.resolve(someLinks);
}
});
return deferred.promise;
}
function requestSomeLink(url) {
var deferred = q.defer();
request(url, function(err, resp, body) {
if (err || resp.statusCode !== 200) {
deferred.reject(new Error(resp.statusCode + ' ' + err + ' ' + body));
} else {
$ = cheerio.load(body);
deferred.resolve(body);
}
});
return deferred.promise;
}