我正在使用流行的npm软件包cheerio来请求检索一些表数据。
虽然我可以轻松地从单个页面中检索和解析表,但我还是想循环/处理多个页面。
我尝试用async
包包装内部循环/各种实用程序提供的内容,但无法弄清楚。在大多数情况下,节点内存不足。
当前代码:
const cheerio = require('cheerio');
const axios = require("axios");
var url = someUrl;
const getData = async url => {
try {
const response = await axios.get(url);
const data = response.data;
const $ = cheerio.load(data);
const announcement = $(`#someId`).each(function(i, elm) {
console.log($(this).text())
})
} catch (error) {
console.log(error);
}
};
getData(url); //<--- Would like to give an array here to fetch from multiple urls / pages
在尝试循环之后,我目前的方法是将其包装在带有回调参数的另一个函数中。但是,目前还没有成功,并且变得非常混乱。
向该函数提供数组的最佳方法是什么?
答案 0 :(得分:1)
您是否尝试过使用Promise.all
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)?
在处理异步调用时,For循环通常是一个坏主意。这取决于您要拨打多少电话,但我相信这足够了。我将使用一组承诺来获取数据并映射结果以进行解析。
答案 1 :(得分:1)
假设您想一次做一个:
; (async() => {
for(let url of urls){
await getData(url)
}
})()