我可以使用一些有价值的帮助,这样我就可以弄清楚如何在Javascript中检测并处理以下错误。
无法加载资源:服务器响应状态为404(找不到文件)
我想要做的是在获取404文件之前继续尝试获取文件,直到找到它为止。
这是关于音频流的。
提前谢谢。
更新:到目前为止我的工作
document.getElementById('audio').addEventListener("ended",function() {
this.src = "someSource";
this.play();
});`
此代码检测我的音频源何时关闭并重新加载。我想做的是继续重新加载源,直到服务器再次启动
答案 0 :(得分:1)
这都是关于承诺的递归。
你可以得到类似的东西(没有嘲笑)(通过解析或拒绝音频元素触发的相应事件中的promises)
基本上你在故障回调
上重新调用你的功能
// this function mocks an asynchronous call which fails 5 times before succeeding
var mockAsynchronousLoad = (function() {
var counter = 0;
return function(url) {
var d = $.Deferred();
setTimeout(function() {
if (counter >= 5) {
d.resolve("mymusic.mp3");
counter = 0;
} else {
d.reject("404");
counter++;
}
}, 200);
return d.promise();
}
}());
var repeatLoad = (function() {
var failed = 0;
return function(limit) {
mockAsynchronousLoad()
.done(function(a) {
document.write("fetched: " + a + "<br>");
failed = 0;
}).fail(function(a) {
document.write("failed with: " + a + "<br>");
if (failed++ < limit) {
document.write("retrying <br>");
repeatLoad(limit);
} else {
document.write("too many failures<br>");
failed = 0;
}
});
};
}());
repeatLoad(10);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>