【发布时间】:2021-09-15 14:04:49
【问题描述】:
编辑:我还在用这个头撞我的桌子。
我正在尝试为画廊中的一堆 img 标签动态设置 src,并使用 javascript。每张画廊幻灯片都有 img 标签,我将它们分为两类, “之前和之后”。问题是有些页面有全部 8 张照片,而其他页面则更少。如果图像加载成功(*在这种情况下,让我们将成功定义为响应不是 404 未找到),一个 .loaded 类被添加到 img 中,这给它一个边框,但如果有一个 404 未找到,然后一个 .loaded 类。添加了隐藏类,将 display: hidden 设置为 img。
当前问题:尽管某些 img 标签在控制台中生成以下错误消息“GET http://blablabla/Images/gallery/job1/before-1.jpg 404 (Not Found)”,. 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");
});
}
};
【问题讨论】:
-
Response.ok是什么?它来自哪里? -
这只是我在阅读另一篇与我的问题有点相似但与我的代码无关的帖子后尝试的东西。恐怕只是我在不理解的情况下尝试了一些事情
-
你的
loadImg函数看起来很不完整——它总是立即调用myResolve(img),从不真正等待什么。也许你的意思是img.onload = myResolve; img.onerror = myReject;? -
@Bergi 感谢您的建议!我已经尝试了您的建议,但未加载的 img 标签仍然得到解决,而不是去捕获。
-
@NekiMakiHaida 我看到您已将代码更改为
img.onload = myResolve(img);。这不是我或泰赛尔所写的。
标签: javascript asynchronous promise