我在同步加载脚本并使用jQuery执行它时遇到问题。
我看起来与此类似:
// Load Libraries in 'when'
$.when(
loadJSFile("lib1.js"),
loadJSFile("lib2.js")
loadJSFile("lib3.js")
).then(function() {
// Load JS files that use the library files
loadJSFile("file1.js");
loadJSFile("file2.js");
loadJSFile("file3.js");
// needs to return deferred object...
}).then(function() {
// Call functions declared in file1, file2 and file3
func1();
func2();
func3();
});
loadJSFile通过$ .getScript加载javascript文件,如果它尚未包含在DOM中,则返回$ .getScript Promise,或者不返回任何内容(如果已经包含)。
我认为第一个调用必须返回Promise / Deferred,但是如何使用3个Deferred对象?
上面的代码在加载file1到file3之前调用了3个函数(func1,func2和func3)...
答案 0 :(得分:4)
我认为第一个调用必须返回Promise / Deferred,但是如何使用3个Deferred对象?
您已经为第一组脚本执行此操作 - $.when
返回一个在所有promise参数都已解决时解析的promise。
您也应该将它用于第二组:
$.when(
loadJSFile("lib1.js"),
loadJSFile("lib2.js")
loadJSFile("lib3.js")
).then(function() {
// Load JS files that use the library files
return $.when(
loadJSFile("file1.js"),
loadJSFile("file2.js"),
loadJSFile("file3.js")
)
}).then(function() {
// Call functions declared in file1, file2 and file3
func1();
func2();
func3();
});
但是,由于您显然正在使用此方法加载异步脚本,因此您可能需要查看更完整的解决方案,例如RequireJS。