JavaScript:在源404上重试

时间:2016-05-18 11:37:06

标签: javascript

我可以使用一些有价值的帮助,这样我就可以弄清楚如何在Javascript中检测并处理以下错误。

  

无法加载资源:服务器响应状态为404(找不到文件)

我想要做的是在获取404文件之前继续尝试获取文件,直到找到它为止。

这是关于音频流的。

提前谢谢。

更新:到目前为止我的工作

document.getElementById('audio').addEventListener("ended",function() {
        this.src = "someSource";
        this.play();
    });` 

此代码检测我的音频源何时关闭并重新加载。我想做的是继续重新加载源,直到服务器再次启动

1 个答案:

答案 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>