В моем базовом приложении мне нужно предоставить резерв для каждого требуемого файла в случае, если CDN, который их поставляет, терпит неудачу.
Я попытался перезаписать require.onError следующим образом:
require.onError = function (err) {
if (err.requireType === 'timeout') {
var url = err.requireModules;
if (!!~url.indexOf("jquery/"))
console.warn("CDN timed out, falling back to local jQuery.js")
require(["libs/jquery"]);
return;
if (!!~url.indexOf("jqueryui/"))
console.warn("CDN timed out, falling back to local jQueryUI.js")
require(["libs/jqueryui"]);
return;
if (!!~url.indexOf("underscore"))
console.warn("CDN timed out, falling back to local underscore.js")
require(["libs/underscore"]);
return;
if (!!~url.indexOf("backbone"))
console.warn("CDN timed out, falling back to local backbone.js")
require(["libs/backbone"]);
return;
}
}
Проблема заключается в том, что это будет асинхронно загружать резервные файлы. Мне нужно, чтобы эти файлы загружались по порядку, так же как и исходный запрос require, где я использую плагин order!.
С переопределенным onError: когда CDN не загружается, резервная загрузка запускается, но не дожидается. Это создает проблему, потому что сценарии упорядочены для загрузки на основе их зависимостей. Вот посмотрите на мою оригинальную инструкцию require, которая зависит от CDN:
require([
"order!http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js",
"order!http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js",
"order!http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js",
"order!http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js",
"order!utils/date",
"order!core/core",
"order!core/errors",
"order!core/constants"
], function() {
...
}