RequireJS错误回调(errback)没有被调用
RequireJS error callback (errback) not getting called
我正在使用RequireJS编写一个模块化的web应用程序,用于模块加载和依赖注入。
从我的bootstrap.js
文件我加载Application.js
并初始化它,传入一个模块数组,这些模块将被Application
"加载"(1)。当初始化完成后,Application
将调用一个函数来表示加载完成。
我正在使用require(["module"], callback(module), callback(error))
异步加载模块(关于彼此)。
我遇到的问题是,当模块加载失败时,不调用错误回调(errback)(至少在Chrome上,当服务器响应404状态码时)。
我可以在谷歌Chrome开发人员工具控制台看到错误,但错误返回没有被调用:
GET http://192.168.1.111:8812/scripts/modules/InexistentModule/manifest.js 404 (Not Found)
Uncaught Error: Load timeout for modules: modules/InexistentModule/manifest
有没有人有过解决RequireJS错误的经验?如果有,怎么做?
(1)实际上,我只是加载模块清单,而不是整个模块,这样我就可以为它们显示图标,并使用Backbone注册它们的路由。SubRoute
我正在使用的库(它们都没有被缩小):
- RequireJS 1.0.8
- 强调1.6.0 jQuery 1.11.0
- 骨干1.1.2
- 骨干。SubRoute 0.4.1
在上面的库中,目前只有RequireJS和Underscore被我直接使用。
在传递成功/失败回调到Require时,我使用下划线进行套用,以便从我的循环中传递i
作为index
参数。对于成功回调,这工作得很好,我认为这不会影响errback(我已经用一个简单的函数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);
}
);
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
};
});
表明您正在使用RequireJS 1.0.8。我已经检查了1的文档。X系列,找不到任何关于错误的信息。这个页面实际上表明,错误返回是在2。x系列。
另外,shim
是在2中引入的。x系列。所以现在,RequireJS忽略了你的shims
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 如何在单击复选框后调用控制器方法
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 使用Google Visualization动态调用构造函数
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 调用函数内部的函数
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- Javascript/jQuery中的并行Ajax调用
- RequireJS错误回调(errback)没有被调用