Dojo要求单个参数同步吗?

时间:2013-07-03 09:51:43

标签: javascript dojo amd

我的公司正在从经典的Dojo语法转向AMD。我们有一些情况需要同步动态加载模块。

dojo中的要求似乎并不正式支持同步加载(至少它没有记录在任何地方)但是如果你没有传入一个函数作为第二个参数(至少在1.7.2中)它似乎有效。

require(["path/to/my/Module"]);

我在Fiddler中添加了额外的延迟,并且在进入下一行之前肯定会加载。

有谁知道这是否可以依赖?如果它只是在2.0版本中已经退役的经典风格的遗留问题,我并不特别想在这个代码库中乱扔垃圾。

1 个答案:

答案 0 :(得分:2)

即使使用commonJs样式需要,AMD也不支持同步加载。如果已加载模块,则require函数将仅同步加载。参见:

如果您已经异步加载模块,则可以使用commonJs样式要求,例如:

var lang = require("dojo/_base/lang");

但是,如果你还没有加载它,它会抛出一个 undefinedModule 错误(我在v1.9中测试过这个)。如果这在v1.7中有效,则在以后的Dojo版本中已经修复

通过将新配置传递给Dojo,暂时无法将其置于同步模式,例如:

require({"async":false});

只能在加载时设置异步设置(请参阅:http://dojotoolkit.org/reference-guide/1.9/loader/amd.html#loader-amd-configuration)。因此,您在初始加载时选择异步或同步,然后就会卡在那里。

我建议重构任何需要同步操作的代码。这通常是可能的,结果可能是更好更快的代码。