Я занимаюсь поиском в сети на каком-то сайте, используя модуль запроса. Я разделил свою работу на три функции здесь. Первая функция получает cookie для меня, во второй функции я получаю ссылки с основных страниц, которые мне нужно посетить, а в третьей функции я снова получаю ссылки на некоторые другие страницы с последних ссылок, которые я выбрал. Вот мой основной код:
getCookie(function (header_to_set) {
getLinksToVisit(header_to_set, function (CoursePageLinks) {
console.log("Link to visit first: " + CoursePageLinks);
getAssigmentPages(CoursePageLinks, header_to_set, function (assignment_link_page) {
console.log("Link to the Assignment: " + assignment_link_page);
/* Visiting Assignment Page to get the active assignments */
request({
url: assignment_link_page,
method: 'POST',
headers: header_to_set
}, function (errorGettingPage, assignmentPageResponse, assignmentPageHtml) {
console.log(assignmentPageResponse.headers);
res.send(assignmentPageHtml);
})
});
})
});
Теперь проблема в том, что когда я вызываю мою функцию getLinskToVisit (), она возвращает мне CoursePageLinks, но перед этим ее используют функции getAssignmentPages (). Я предполагаю, что это происходит, потому что мой getLinksToVisit () по-прежнему асинхронный из-за циклов в нем. Помогите мне сделать это синхронно, потому что я не смог этого сделать. Вот мой код getLinksToVisit ():
function getLinksToVisit(headers, callback) {
let links_to_visit = [];
console.log(headers);
request({
url: "http://someLink",
headers: headers,
followRedirect: false,
method: 'GET',
}, function (accessPage, getLinksResponse, getLinksHTML) {
var attributes = [];
const root = htmlparser.parse(getLinksHTML);
const parsedData = root.querySelector('#selectNav').querySelectorAll('option');
for (let i = 0; i < parsedData.length; i++) {
attributes[i] = parsedData[i].rawAttributes;
}
let j = 0;
for (let l = 0; l < attributes.length; l++) {
if (attributes[l].value != '""') {
links_to_visit.push(attributes[l].value);
j++;
}
}
callback(links_to_visit);
//console.log(links_to_visit);
//callback(links_to_visit);
});
}