我的公司正在从经典的 Dojo 语法转向 AMD。我们有一些情况需要同步动态加载模块。
dojo 中的 Require 似乎并不正式支持同步加载(至少它没有在任何地方记录),但如果您不传入 a 函数作为第二个参数,它似乎可以工作(至少在 1.7.2 中) 。
require(["path/to/my/Module"]);
我在 Fiddler 中添加了额外的延迟,并且它肯定会在进入下一行之前加载。
有谁知道这是否安全可靠?如果这只是将在 2.0 中退役的经典风格的遗留问题,我并不想在代码库中乱扔乱七八糟的东西。
最佳答案
即使使用commonJs风格需要,AMD也不支持同步加载。仅当模块已经加载时,require 函数才会同步加载。请参阅:
如果你已经异步加载了模块,那么可以使用commonJs风格的require,例如:
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)。因此,您在初始加载时选择异步或同步,然后就陷入困境。
我建议重构任何需要同步操作的代码。这通常是可能的,并且结果可能会是更好更快的代码。
关于javascript - Dojo 需要单参数同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17444827/