我的公司正在从经典的Dojo语法转向AMD。我们有一些情况需要同步动态加载模块。
dojo中的要求似乎并不正式支持同步加载(至少它没有记录在任何地方)但是如果你没有传入一个函数作为第二个参数(至少在1.7.2中)它似乎有效。
require(["path/to/my/Module"]);
我在Fiddler中添加了额外的延迟,并且在进入下一行之前肯定会加载。
有谁知道这是否可以依赖?如果它只是在2.0版本中已经退役的经典风格的遗留问题,我并不特别想在这个代码库中乱扔垃圾。
答案 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)。因此,您在初始加载时选择异步或同步,然后就会卡在那里。
我建议重构任何需要同步操作的代码。这通常是可能的,结果可能是更好更快的代码。