Есть ли в LABJS положение для функции обратного вызова, если время ожидания истекло?
Я асинхронно загружаю скрипты через LabJS и имею цепочку зависимых скриптов. Теперь, если один из сценариев в цепочке обрывается (в том смысле, что он не может быть загружен или время ожидания истекло), я считаю, что остальные сценарии в цепочке зависимостей не будут выполнены. В таком случае, возможно ли предоставить пользовательскую функцию обратного вызова для принятия соответствующих мер, если конкретный сценарий не загружается? Если это невозможно с LabJS, возможно ли это с любым другим асинхронным загрузчиком скриптов?
3 ответа
Вот пример, показывающий, как обернуть setTimeout() тайм-ауты вокруг кода LABjs... в этом случае он предоставляет резервный механизм, где он пытается загрузить jquery из CDN, затем, если тайм-аут проходит, он прерывает его и пытается загрузить jquery из вместо этого локальный файл.
По словам getify, который сидит примерно в 20 футах от меня, в общем, нет способа справиться с такими таймаутами, в основном потому, что тайм-аут не является явным, "положительным" событием. (В конкретном случае того, как библиотека обрабатывает цепочку зависимостей в таких случаях, я позволю автору самому уточнить.)
Что вы можете сделать, так это использовать свой собственный сторожевой таймер, чтобы ждать столько времени, сколько считаете нужным. Просто запустите интервальный таймер, проверив наличие какого-либо контрольного признака того, что ваш скрипт попал на страницу, и если после некоторого количества итераций вы его не видите, вы можете использовать альтернативу (другой хост скрипта, что угодно).
Как насчет этого? Я не проверял это:
$LAB.script('jquery-from-cdn.js').wait(function(){
if(!window.jQuery) {
$LAB.script('local-jquery.js').wait(load_scripts);
} else {
load_scripts();
}
});
function load_scripts() {
$LAB.script('other-js.js');
}