luc*_*mon 1 javascript error-handling requirejs
我正在使用RequireJS编写模块化的Web应用程序,用于模块加载和依赖项注入。
从我的bootstrap.js文件I负荷Application.js和初始化它,传递要被“加载”的模块阵列(1)通过Application。初始化完成后,Application会调用函数来告知已完成加载。
我正在使用异步加载模块(相对于彼此)require(["module"], callback(module), callback(error))。
我遇到的问题是,当模块加载失败时(至少在服务器以404状态代码响应时,至少在Chrome上),未调用错误回调(errback)。
我可以在Google Chrome开发者工具控制台中看到该错误,但未调用errback:
GET http://192.168.1.111:8812/scripts/modules/InexistentModule/manifest.js 404 (Not Found)
Uncaught Error: Load timeout for modules: modules/InexistentModule/manifest
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过与RequireJS错误有关的此问题?如果是这样,怎么办?
(1)实际上,我只是加载模块清单,而不是整个模块,以便我可以为它们显示图标并使用Backbone.SubRoute注册其路由。
我正在使用的库(都没有缩小):
在上面的库中,目前我仅直接使用RequireJS和Underscore。
当将成功/失败回调传递给Require时,我使用了Underscore进行curry,以便i从我的循环中传递index参数。对于成功的回调,它的运行效果非常好,我认为这不会影响到errback(我已经使用Arity 1的简单函数进行了测试,而不是返回的部分函数,_.partial并且在404的情况下仍未调用该函数错误)。
我将在此处发布我的bootstrap.js和Application.js文件,因为它们可能会提供更多信息。
谢谢!
bootstrap.js
require.config({
catchError: true,
enforceDefine: true,
baseUrl: "./scripts",
paths: {
"jquery": "lib/jquery",
"underscore": "lib/underscore",
"backbone": "lib/backbone",
"backbone.subroute": "lib/backbone.subroute"
},
shim: {
"underscore": {
deps: [],
exports: "_"
},
"backbone": {
deps: ["jquery", "underscore"],
exports: "Backbone"
},
"backbone.subroute": {
deps: ["backbone"],
exports: "Backbone.SubRoute"
}
}
});
define(["jquery", "underscore", "backbone", "Application"],
function ($, _, Backbone, Application) {
var modules = ["Home", "ToS", "InexistentModule"];
var defaultModule = "Home";
var onApplicationInitialized = function()
{
require(["ApplicationRouter"], function(ApplicationRouter){
ApplicationRouter.initialize();
});
}
Application.initialize(modules, defaultModule, onApplicationInitialized);
}
);
Run Code Online (Sandbox Code Playgroud)
Application.js
define([
'jquery',
'underscore',
'backbone'],
function($,_,Backbone){
var modules;
var manifests = [];
var routers = [];
var defaultModule = "";
var totalModules = 0;
var loadedModules = 0;
var failedModules = 0;
var onCompleteCallback = function(){};
var onModuleManifestLoadComplete = function(index, manifest){
manifests[index] = manifest;
console.log("Load manifest for module: " + modules[index] + " complete");
//TODO: init module
loadedModules++;
if(totalModules == (loadedModules + failedModules))
onCompleteCallback();
};
var onModuleManifestLoadFailed = function(index, err){
console.log("Load manifest for module: " + modules[index] + " failed");
failedModules++;
if(totalModules == (loadedModules + failedModules))
onCompleteCallback();
};
var initialize = function(_modules, _defaultModule, callback){
defaultModule = _defaultModule;
modules = _modules;
manifests = Array(modules.length);
totalModules = modules.length;
onCompleteCallback = callback;
for(i=0; i<modules.length; i++){
require(['modules/'+modules[i]+'/manifest'],
_.partial(onModuleManifestLoadComplete, i),
_.partial(onModuleManifestLoadFailed, i));
};
};
return {
modules: modules,
manifests: manifests,
routers: routers,
defaultModule: defaultModule,
initialize: initialize
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2299 次 |
| 最近记录: |