我有一个请求 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;
}