私は現在、ページのすべてのリンクをチェックし、壊れたリンクを強調するスクリプトを作成しています。同期的に、これは大きな仕事ではありませんでしたが、私は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が終了するのを待っている問題が発生したんだけど、あなたが何か提案、または私は、問題をより明確にするために何かできることがある場合は、ポストを残して自由に感じます!あなたは、彼らはあなたがreduce
アレイ方式を使用する必要があります終えた後、次々と実行して、何かをする要求の数を待つ必要がある場合は
はみんな
'document.querySelectorAll( 'a'); 'を使用してください。すべてのアンカーを取得するには '$( 'a')'を使用します。また、jQueryを使用するかどうかを決定します。あなたがそうであれば、それはすべてのために使用し、あなたはもっと幸せになるでしょう。また、ajax( 'XMLHttpRequuest')は非同期型であるため、' req.status'はチェックする際に必ずしも正しいとは限りません。 –
私はこれに慣れていないので、確認する前にreq.statusがロードされるまで待つことができますか?また、私はcolorUp()を呼び出す前にforEach部分を非同期にする方法はありますか? マイクにお返事ありがとうございます。 – Gwinert
Promisesと 'Promise.all'という名前の関数についていくつかの調査をしたいと思うでしょう。 jQueryの '$ .ajax'メソッドを使うと少し楽です。さもなければ、あなたは 'XMLHttpRequest'を約束で動作させる必要があります。これは小さな仕事ではありません。あなたはおそらくあなたのためにそれを行うライブラリを見つけることができます。基本的には、研究、研究、研究:)。 –