Javascript onload是否可能返回错误?

Javascript onload是否可能返回错误?,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我有以下函数来获取上传的图像文件的尺寸(宽度和高度): let target=document.getElementById('test'); 函数getImageDimension(){ 返回新承诺((解决、拒绝)=>{ 设imgElement=newimage(); imgElement.src=window.URL.createObjectURL(target.files[0]); imgElement.onload=()=>{ window.URL.revokeObjectURL(im

我有以下函数来获取上传的图像文件的尺寸(宽度和高度):

let target=document.getElementById('test');
函数getImageDimension(){
返回新承诺((解决、拒绝)=>{
设imgElement=newimage();
imgElement.src=window.URL.createObjectURL(target.files[0]);
imgElement.onload=()=>{
window.URL.revokeObjectURL(imgElement.src);
决心({
宽度:imgElement.width,
高度:imgElement.height
});
};
});
}
target.addEventListener('change',(e)=>{
让承诺=新承诺((解决、拒绝)=>{
//在我真正得到维度之前,还有一些其他的东西
//实际上,在尝试获取文件的维度之前,我在这里验证了文件类型
//举个例子,我马上解决
解决(“测试”);
})
.然后(()=>{
返回getImageDimension();
})
.然后((维度)=>{
console.log(维度);
})
.catch((e)=>{
控制台日志(e.message);
});
});
onload
不能“返回错误”,而是在加载图像时出错时调用,并且从不调用
onload


很多事情都会阻止映像加载,从而阻止调用
onload
,包括来自服务器的任何4xx或5xx错误响应,或者根本无法连接到服务器,或者服务器的响应不是有效映像。

我明白了!只需添加
imgElement.onerror=()=>{//Some reject block}
足以确保承诺得到解决或被拒绝,那么?是的,
imgElement.onerror=reject
可能就足够了。技术上正确,但可能仍然存在一个错误,例如浏览器无法设置所述图像的宽度或高度,但是IE可以处理所有没有绝对高度和宽度属性的svg图像。@kaido这不是问题,因为仍然会调用
onload
,承诺将得到解决。这里的担忧是,承诺永远不会得到解决或拒绝。这不是一个
错误,但仍然是一个错误,肯定是一个问题。例如,至少在Firefox中,CanvasRenderingContext2D.drawImage会在您传递此类图像时抛出IndexSizeError。大多数成像工具还将考虑任何宽度或高度为0的图像无效。OP可能有兴趣通过撤销其承诺来处理此类案件,即使这不是由网络或解码错误引起的(因此不会触发onerror事件)