Dojo要求,模块加载失败时连接错误

Posted

技术标签:

【中文标题】Dojo要求,模块加载失败时连接错误【英文标题】:Dojo require, connect to error when module failed loading 【发布时间】:2012-05-04 12:54:15 【问题描述】:

当我尝试加载不存在的模块时,它会失败并出现 404 错误(当然)。我想处理这个错误但不知道如何连接到“错误”事件。

根据 Dojo 文档,我应该可以使用 its micro event api 来做到这一点。

此代码不起作用。

var handle = require.on('error', function( error )
                 
                     alert('Finally error')
                 );

require(['nonexistent/module'], function ( m )

     alert('Module was loaded correctly')           
);

Dojo版本为1.7.1,浏览器最新Chrome。

【问题讨论】:

像这样的require.on 处理程序会在该时间点之后为每个错误事件调用,对吗?我使用了var h = require.on('error', function (err) h.remove(); ...etc ,但这只会处理第一个错误事件,不一定是由nonexistent/module 引起的错误事件。除了在错误字符串中搜索模块名称之外,还有什么更优雅的方法可以只处理模块的错误? 【参考方案1】:

关于这个的文档有点好奇。我可以在 xhr 要求失败后的短暂超时 (dojoConfig.waitSeconds) 后触发 'error' 事件,但仅限于异步模式,并且仅限于 Dojo 的开发版本。

为什么?好吧,只有异步模式会引发事件,看起来 CDN 构建是使用 dojo-timeout-api == 0 构建的。

您可以使用自己的自定义 (SDK) 版本的 Dojo 吗?

@mschr - 如果您使用 Dojo(每晚)而不是 Dojo 1.7.2,则您的 jsfiddle 示例有效 - 原因与上述相同。

【讨论】:

我在异步模式下使用 sdk 版本的 dojo。将 dojoConfig.waitSeconds 设置为某个值最终会引发错误。将其设置为 0 不会。也适用于 1.7.1。谢谢。 太棒了,不知道谷歌会遗漏好东西 :) 这篇文章实际上让我实现了一个长期寻求的功能!在尝试发布加载模块的进度时,监控加载程序给我带来了压力。这个事件 api 成功了【参考方案2】:

用调试集试试

<script src="baseUrl/dojo/dojo.js" data-dojo-config="async:true, debug: true, debugAtAllCost:true"></script>

编辑;没有这样的运气 - 似乎文档在这里实施之前..

为了寻找解决方案而创建了一个小提琴,概念很好,我自己会喜欢使用它

http://jsfiddle.net/seeds/h6bXQ/

【讨论】:

以上是关于Dojo要求,模块加载失败时连接错误的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 RequireJs 加载 Dojo 模块

配置 dojo 加载程序路径

Karma/Jasmine 测试失败并出现错误:'未捕获的错误:尚未为上下文加载模块名称“simple_test.js”:_。使用要求([])'

如何使用 TypeScript 加载 dojo 模块

Worklight 6.1 和外部 dojolib,使用 AMD 加载自定义模块

Dojo:覆盖预加载模块