【发布时间】:2013-03-27 09:06:01
【问题描述】:
我正在尝试通过从 Internet 下载 3 个图像文件并平均加载它们所花费的时间来实现速度测试。如果由于某种原因出现错误,我想跳过加载该图像并继续下一个。如果错误发生在最后一张图片上,那么我想计算该点的平均速度并返回给调用者。
现在,一旦发生错误(我故意更改了图像的 url,使其不存在),它不会再进一步。我尝试从 .onerror 函数返回 true,但没有运气。有什么建议吗?
var images = [{
"url": 'http://<removed>250k.jpg?n=' + Math.random(),
"size": 256000
}, {
"url": 'http://<removed>500k.jpg?n=' + Math.random(),
"size": 512000
}, {
"url": '<removed>1000k.jpg?n=' + Math.random(),
"size": 1024000
}
];
function calculateBandwidth() {
var results = [];
for (var i = 0; i < images.length; i++) {
var startTime, endTime;
var downloadSize = images[i].size;
var download = new Image();
download.onload = function () {
endTime = (new Date()).getTime();
var duration = (endTime - startTime) / 1000;
var bitsLoaded = downloadSize * 8;
var speedBps = (bitsLoaded / duration).toFixed(2);
var speedKbps = (speedBps / 1024).toFixed(2);
var speedMbps = (speedKbps / 1024).toFixed(2);
results.push(speedMbps);
//Calculate the average speed
if (results.length == 3) {
var avg = (parseFloat(results[0]) + parseFloat(results[1]) + parseFloat(results[2])).toFixed(2);
return avg;
}
}
download.onerror = function (e) {
console.log("Failed to load image!");
return true;
};
startTime = (new Date()).getTime();
download.src = images[i].url;
}
}
【问题讨论】:
-
查看 try/catch 块
-
失败时你会返回,这就是我猜的原因
-
没有必要返回,一旦你返回你就打破了你的循环
-
我做了一些事情similar here(fiddle demo,可能加载缓慢)。我认为您不满意的原因是,如果您要链接请求,如果
onerror也可以继续该过程。所以不是return true/false;,而是“ok error,处理它,现在更多图像,还是完成测试?”来自错误处理程序。
标签: javascript