Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Requirejs忽略可选依赖项的加载错误_Javascript_Requirejs_Amd - Fatal编程技术网

Javascript Requirejs忽略可选依赖项的加载错误

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

我正在使用require.js并加载一个处理跟踪的库。但是,我有一些用户阻止它加载

因为它不是我应用程序的关键部分,所以我希望所有东西都能正常工作,即使我的跟踪库无法加载

我已经看过了通过errbacks、config fallbacks和global onError函数进行处理的文档

我在想这样的事情:

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
不起作用?是因为代码没有被执行,而是被解析了吗?