2016-05-18 5 views
-1

Я мог бы использовать некоторую ценную помощь, поэтому я могу выяснить, как обнаружить и работать со следующей ошибкой в ​​Javascript.JavaScript: Повторите попытку на источнике 404

Не удалось загрузить ресурс: сервер ответил со статусом 404 (файл не найден)

То, что я хотел бы сделать, это продолжать попытки извлечения файла при получении 404, пока не будет найдено ,

Речь идет об аудиопотоке.

Заранее спасибо.

UPDATE: Моя работа до сих пор

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

Этот код определяет, когда мой источник звука вниз и перезагружает его. То, что я хотел бы сделать, это сохранить перезагрузку источника до тех пор, пока сервер не будет снова

+0

Не могли бы вы предоставить соответствующий код JS, который у вас уже есть? – sp00m

+0

Кроме того, может оказаться полезным скриншот консоли. –

+0

@ sp00m Благодарим вас за ответ. Я обновил свой пост. –

ответ

1

Это все о рекурсии по обещаниям.

Вы могли бы получить что-то подобное (без насмешливого) (путем разрешения или отказа от обещаний в соответствующих событиях, выпущенных аудио элемент)

В основном вы reinvoke вашей функции на неудаче CallBack

// 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>

Смежные вопросы