当时jquery多个延迟

时间:2015-05-11 07:41:59

标签: javascript jquery

我在同步加载脚本并使用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)...

1 个答案:

答案 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