2

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

dojo 中的 Require 似乎没有正式支持同步加载(至少在任何地方都没有记录),但如果您不将 a 函数作为第二个参数传递(至少在 1.7.2 中),它似乎可以工作。

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

我在 Fiddler 中添加了额外的延迟,它肯定会在移动到下一行之前加载。

有谁知道这是否可以安全依赖?如果它只是将在 2.0 中退役的经典风格的遗留物,我并不想在代码库中乱扔垃圾。

4

1 回答 1

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 )。因此,您在初始加载时选择异步或同步,然后您就卡在那里了。

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

于 2013-07-03T13:03:02.197 回答