Как следует из названия, я просто хочу получить доступ к данным глобального массива, которые я заполнил в getURLs() в моей функции getSubURLs(), чтобы я мог манипулировать данными внутри. Может ли кто-нибудь сообщить мне, как я могу это сделать? Спасибо большое заранее!!
const cheerio = require('cheerio');
const axios = require('axios');
let URL = 'https://toscrape.com';
const urlQueue = [];
const getURLS = async () => {
await axios
.get(URL)
.then((res) => {
const data = res.data;
const $ = cheerio.load(data);
$("a[href^='http']").each((i, elem) => {
const link = $(elem).attr('href');
if (urlQueue.indexOf(link) === -1) {
urlQueue.push(link);
}
});
console.info(urlQueue);
return urlQueue;
})
.catch((err) => {
console.info(`Error fetching and parsing data: `, err);
});
};
const getSubURLs = async () => {
// call urlqueue array here after it finishes being created
}
getURLS();
Честно говоря, я нуб, и я не знаю, как поставить эти данные в очередь и использовать их, чтобы я мог снова очистить их. Что вы мне посоветуете делать?
Я не знаю, мне не хватает много информации о том, что вы пытаетесь сделать, но, судя по вашему примеру, вам не нужна асинхронность.
Я пытаюсь очистить веб-сайт, затем поставить в очередь все URL-адреса с этого сайта и затем следовать им. В get suburls() я возьму этот массив и пройдусь по ним, извлекая каждый из их URL-адресов.
Не смешивайте async
с синтаксисом .then
, просто await
результат:
const cheerio = require('cheerio');
const axios = require('axios');
let URL = 'https://toscrape.com';
const urlQueue = [];
const getURLS = async () => {
try {
const res = await axios.get(URL);
const data = res.data;
const $ = cheerio.load(data);
$("a[href^='http']").each((i, elem) => {
const link = $(elem).attr('href');
if (urlQueue.indexOf(link) === -1) {
urlQueue.push(link);
}
});
console.info(urlQueue);
} catch (err) {
console.info(`Error fetching and parsing data: `, err);
}
};
// in case there's no top-level await
(async () => {
await getURLS();
// do something about urlQueue
})();
Зачем использовать асинхронные функции, если вам действительно нужно, чтобы они ждали друг друга?