В настоящее время я работаю над скриптом, который проверяет все ссылки на страницу и выделяет любые неработающие ссылки. Синхронно это не было главной задачей, но я только начал работать с Asynch, поэтому любая помощь с моим кодом была бы высоко оценена.Выполнение async forEach() '
var size = 0;
var itemsProcessed = 0;
console.log("Size: " + size);
function linkCheck() {
var body = document.querySelectorAll("*");
var checker = Array.from($(body).filter("a"));
size = (Object.keys(checker).length);
console.log("Size: " + size);
var list;
checker.forEach(function (anchor) {
var link = $(anchor).attr("href");
itemsProcessed++;
console.log("Items: " + itemsProcessed);
if (itemsProcessed == size) {
colorUp(list);
}
var req = new XMLHttpRequest();
req.open('HEAD', $(checker).attr("href"), true);
itemsProcessed++;
try {
req.send(null);
} catch (e) {
console.log("ERROR");
return true;
}
console.log(req.status);
var data = (req.status !== 200);
if (data) {
//console.log("Added to List")
list += data;
}
console.log(link, data);
});
}
function colorUp(list) {
console.log("DONE");
$(list).css({
"border": "3px solid #ffb700",
"background": "repeating-linear-gradient(135deg, #FFE0B2, #FFE0B2 5px, #ffffff 5px, #ffffff 10px)"
});
}
linkCheck();
В настоящее время у меня возникают проблемы ожидания для Foreach, чтобы закончить, но если у вас есть какие-либо предложения, или все, что я могу сделать, чтобы сделать эту проблему более ясной, не стесняйтесь оставить пост!
Спасибо ребята
Используйте 'document.querySelectorAll ('a'); ' или '$ ('a')' для получения всех якорей. Также решите, собираетесь ли вы использовать jQuery или нет. Если да, используйте его для всего, и вы будете намного счастливее. Также обратите внимание, что ajax ('XMLHttpRequuest') является асинхронным, поэтому' req.status' не обязательно будет правильным, когда вы его проверяете. –
Просто потому, что я незнаком с этим, как я могу заставить его ждать, пока req.status не будет загружен, прежде чем я его проверю? Кроме того, как я должен сделать forEach частью асинхронным до вызова colorUp()? Благодарим за отзыв Майка. – Gwinert
Вы хотите провести некоторое исследование обещаний и функцию под названием 'Promise.all'. Если вы используете метод jQuery '$ .ajax', это немного проще. В противном случае вам нужно будет выполнить работу XMLHttpRequest с обещаниями, что немаловажно. Возможно, вы, вероятно, найдете библиотеку, которая сделает это за вас. В основном, исследования, исследования, исследования :). –