You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

异步JS用Promise设置img的src时404不触发onerror问题求助

问题根因

你的loadImg函数中事件绑定逻辑存在错误:img.onload = myResolve(img)、img.onerror = myReject(img)这两行是立即执行了myResolve/myReject方法,直接把Promise的状态敲定了,而不是将这两个方法作为回调函数,等待图片加载/加载失败事件触发时再执行。
代码运行时不等图片请求返回结果,就已经将Promise标记为成功状态,所以哪怕后续请求返回404,也只会走then分支添加loaded类,和实际加载结果完全脱节。
另外还有一个容易忽略的细节:要先绑定事件回调,再给img.src赋值,避免部分浏览器缓存场景下,图片加载完成的瞬间事件还没绑定,导致回调漏触发。

修正后的代码

仅需要修改loadImg函数即可:

const loadImg = function (img, url) {
    return new Promise((myResolve, myReject) => {
      // 先绑定事件回调
      img.onload = () => myResolve(img);
      img.onerror = () => myReject(img);
      // 再赋值src触发加载
      img.src = url;
    });
};

其余业务逻辑不需要修改,修正后即可正常根据图片加载结果添加对应类名。

内容的提问来源于stack exchange,提问作者NekiMakiHaida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:57:01