我正在抓取一个网站,我将请求库与节点js一起使用,所以我遍历了一组URL,并对每个URL都进行了请求,问题是请求是异步的,仅在所有请求之后我才需要做一些事情完成的代码如下:
for (var i = 0; i < urls.length; i++) {
request(urls[i], function (err,resp,body) {
if (!err && resp.statusCode == 200) {
var $ = cheerio.load(body);
var string = $('.author .mini').text();
var regExp = /(\+971|00971|05)\d{1,12}/g;
if(string.match(regExp)) {mobilePhones.push(string.match(regExp)[0])}
}
});
}
所以当所有请求都完成后,我只想console.log(mobilePhones);
使用promise.all()可以更轻松地完成此操作:
var myFunc = function (err,resp,body) {
if (!err && resp.statusCode == 200) {
var $ = cheerio.load(body);
var string = $('.author .mini').text();
var regExp = /(\+971|00971|05)\d{1,12}/g;
if(string.match(regExp)) {mobilePhones.push(string.match(regExp)[0])}
};
var p1 = request(urls[0], myFunc);
var p2 = request(urls[1], myFunc);
// Do this for all of urls.length
Promise.all([p1, p2, p3, p4, p5]).then(() => {
console.log(mobilePhones);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句