Async Javascript 承诺设置 img 的 src
Async Javascript Promise to set src of img
编辑:我还在用这个把头撞在桌子上。
我正在尝试为图库中的一堆 img 标签动态设置 src,并使用 javascript。每张画廊幻灯片都有 img 标签,我将其分为两类,
“之前和之后”。问题是有些页面有全部 8 张照片,而其他页面则更少。如果图像加载成功(*在这种情况下,让我们将成功定义为响应不是未找到 404),则会将 .loaded class 添加到 img 中,为其提供边框,但如果未找到 404 ,然后添加一个 .hidden class,它设置 display: hidden 到 img.
当前问题:尽管一些 img 标签在控制台中生成了以下错误消息,“GET http://blablabla/Images/gallery/job1/before-1.jpg 404(未找到)”,.onerror 没有不开火,.onload 开火。如果我检查尚未加载的 img 标签(顺便说一下,它们已经在页面上),我可以看到它们具有已填写的 src 属性,尽管提供的路径中的图像不存在。当然它仍然应该是一个错误?
const loadImg = function (img, url) {
return new Promise((myResolve, myReject) => {
img.src = url;
img.onload = myResolve(img);
img.onerror = myReject(img);
});
};
const populateBeforeImgs = function () {
for (let i = 0; i < beforeImgs.length; i++) {
const img = beforeImgs[i];
const url = `Images/gallery/job${galleryIndex}/before-${i + 1}.jpg`;
loadImg(img, url)
.then((value) => {
value.classList.add("loaded");
})
.catch((error) => {
error.classList.add("hidden");
});
}
};
const populateAfterImgs = function () {
for (let i = 0; i < afterImgs.length; i++) {
const img = afterImgs[i];
const url = `Images/gallery/job${galleryIndex}/after-${i + 1}.jpg`;
loadImg(img, url)
.then((value) => {
value.classList.add("loaded");
})
.catch((error) => {
error.classList.add("hidden");
});
}
};
问题出在您的 loadImg
函数上:
if (Response.ok) {
响应已在 window 上定义,但 Response.ok 未定义。未定义的计算结果为假(是一个假值)
试试这个:
const loadImg = function(img, url) {
return new Promise((resolve, reject) => {
img.src = url;
img.onload = () => resolve(img);
img.onerror = () => reject(img);
});
};
const img1 = new Image();
const img2 = new Image();
loadImg(img1, "https://www.placecage.com/c/200/300").then((img) => console.log("image 1 loaded!")).catch(() => console.warn("img 1 failed to load"));
loadImg(img2, "https://ihopethisisnotavalidurladasdasd").then((img) => console.log("image 2 loaded!")).catch(() => console.warn("img 2 failed to load"))
编辑:我还在用这个把头撞在桌子上。
我正在尝试为图库中的一堆 img 标签动态设置 src,并使用 javascript。每张画廊幻灯片都有 img 标签,我将其分为两类, “之前和之后”。问题是有些页面有全部 8 张照片,而其他页面则更少。如果图像加载成功(*在这种情况下,让我们将成功定义为响应不是未找到 404),则会将 .loaded class 添加到 img 中,为其提供边框,但如果未找到 404 ,然后添加一个 .hidden class,它设置 display: hidden 到 img.
当前问题:尽管一些 img 标签在控制台中生成了以下错误消息,“GET http://blablabla/Images/gallery/job1/before-1.jpg 404(未找到)”,.onerror 没有不开火,.onload 开火。如果我检查尚未加载的 img 标签(顺便说一下,它们已经在页面上),我可以看到它们具有已填写的 src 属性,尽管提供的路径中的图像不存在。当然它仍然应该是一个错误?
const loadImg = function (img, url) {
return new Promise((myResolve, myReject) => {
img.src = url;
img.onload = myResolve(img);
img.onerror = myReject(img);
});
};
const populateBeforeImgs = function () {
for (let i = 0; i < beforeImgs.length; i++) {
const img = beforeImgs[i];
const url = `Images/gallery/job${galleryIndex}/before-${i + 1}.jpg`;
loadImg(img, url)
.then((value) => {
value.classList.add("loaded");
})
.catch((error) => {
error.classList.add("hidden");
});
}
};
const populateAfterImgs = function () {
for (let i = 0; i < afterImgs.length; i++) {
const img = afterImgs[i];
const url = `Images/gallery/job${galleryIndex}/after-${i + 1}.jpg`;
loadImg(img, url)
.then((value) => {
value.classList.add("loaded");
})
.catch((error) => {
error.classList.add("hidden");
});
}
};
问题出在您的 loadImg
函数上:
if (Response.ok) {
响应已在 window 上定义,但 Response.ok 未定义。未定义的计算结果为假(是一个假值)
试试这个:
const loadImg = function(img, url) {
return new Promise((resolve, reject) => {
img.src = url;
img.onload = () => resolve(img);
img.onerror = () => reject(img);
});
};
const img1 = new Image();
const img2 = new Image();
loadImg(img1, "https://www.placecage.com/c/200/300").then((img) => console.log("image 1 loaded!")).catch(() => console.warn("img 1 failed to load"));
loadImg(img2, "https://ihopethisisnotavalidurladasdasd").then((img) => console.log("image 2 loaded!")).catch(() => console.warn("img 2 failed to load"))