Javascript Requirejs忽略可选依赖项的加载错误
我正在使用require.js并加载一个处理跟踪的库。但是,我有一些用户阻止它加载 因为它不是我应用程序的关键部分,所以我希望所有东西都能正常工作,即使我的跟踪库无法加载 我已经看过了通过errbacks、config fallbacks和global onError函数进行处理的文档 我在想这样的事情:Javascript Requirejs忽略可选依赖项的加载错误,javascript,requirejs,amd,Javascript,Requirejs,Amd,我正在使用require.js并加载一个处理跟踪的库。但是,我有一些用户阻止它加载 因为它不是我应用程序的关键部分,所以我希望所有东西都能正常工作,即使我的跟踪库无法加载 我已经看过了通过errbacks、config fallbacks和global onError函数进行处理的文档 我在想这样的事情: requirejs.onError = function (err) { var modules = err.requireModules; for (var i = 0
requirejs.onError = function (err) {
var modules = err.requireModules;
for (var i = 0; i < modules.length; i++) {
if (modules[i] == 'tracking-lib') {
// Would be great if I could do something like define('modules[i]', [], null)
}
}
};
requirejs.onError=函数(err){
var modules=err.requireModules;
对于(变量i=0;i
类似的问题(不能解决我的问题):
我创建了一个小的Require插件(),可以延迟加载AMD模块,例如:
define(["lazy!myModule"], function(myModule) {
myModule.get().then( // get() returns a promise
function(m) {
// handle success, module is in m argument
},
function(e) {
// handle error
}
);
});
你可以按原样使用它。或者,您可以创建一个类似的插件,例如,可选
,而不依赖于所需的延迟。可选的
插件可以用作:
define(["optional!myModule"], function(myModule) {
// code as above
// or there may be a way to make optional! return null, if loading failed
来自的代码可能会有所帮助,当然还有
还有一种更简单但更脏的方法,就是使用全局require
功能,在客户端模块内require
可选模块:
define([], function() { // USE THE GLOBAL require!!!
require(["myOptionalModule"],
function(myOptionalModule) {
// loaded successfully
},
function(error) {
// load failed
}
);
});
(同时查看与上一个代码相关的内容)
总之,我认为没有一种方法可以选择使用普通API加载模块。您必须以某种方式自己实现它,并通过回调处理异步性,如上所述,无论是在应用程序代码中还是在插件中。另一个问题可能无法解决您的问题,但似乎是相关的:我在另一个类似问题中为您的确切问题添加了一个解决方案。检查我不知道Stackoverflow对重复答案的政策是什么,所以我不会复制这个问题的全部答案内容。“什么不能解决我的问题”不是正确的问题描述。为什么它不能解决你的类似问题,你面临的问题是什么?你测试过这个吗?在您链接的文档中,他们说:“注意:errback仅适用于回调样式的require调用,而不适用于define()调用。define()仅用于声明模块。”
try..catch
包装require('module'))
内部定义也不起作用。您是对的,第三个示例需要在模块名称周围加括号,当然参数之间加逗号!更正。除此之外,代码(1)和(3)正在工作。(代码(2)是虚拟的。)try..catch
保证不会按预期工作,无论是在同步情况下还是在异步情况下。谢谢我来测试一下。为什么尝试..catch
不起作用?是因为代码没有被执行,而是被解析了吗?