Есть ли в LABJS положение для функции обратного вызова, если время ожидания истекло? - PullRequest
1 голос
/ 11 июня 2011

Я асинхронно загружаю скрипты через LabJS и имею цепочку зависимых скриптов. Теперь, если один из сценариев в цепочке обрывается (в том смысле, что он не может быть загружен или время ожидания истекло), я считаю, что остальные сценарии в цепочке зависимостей не будут выполнены. В таком случае, возможно ли предоставить пользовательскую функцию обратного вызова для принятия соответствующих мер, если конкретный сценарий не загружается? Если это невозможно с LabJS, возможно ли это с любым другим асинхронным загрузчиком скриптов?

Ответы [ 3 ]

4 голосов
/ 11 июня 2011

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

https://gist.github.com/670840

2 голосов
/ 11 июня 2011

По словам getify, который сидит примерно в 20 футах от меня, в общем, нет способа справиться с такими таймаутами, в основном потому, что тайм-аут не является явным, "положительным" событием. (В конкретном случае того, как библиотека обрабатывает цепочку зависимостей в таких случаях, я позволю автору самому уточнить.)

То, что вы можете сделать, это использовать свой собственный сторожевой таймер, чтобы ждать, пока вы чувствуете, что это уместно. Просто запустите интервальный таймер, проверив наличие каких-либо контрольных признаков того, что ваш скрипт попал на страницу, и если после некоторого количества итераций вы его не видите, вы можете использовать альтернативу (другой хост скрипта, что угодно).

0 голосов
/ 13 февраля 2012

А как насчет этого?Я не проверял это:

$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');
}
...