jQuery中的多个Deferreds在then()函数中

6

我有一个问题,希望能用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,如果已经包含,则不返回任何内容。

我认为第一个then调用必须返回Promise/Deferred,但是如何使用3个Deferred对象来实现呢?

上述代码在file1到file3加载之前调用了3个函数(func1、func2和func3)...

1个回答

4
我认为第一个then调用必须返回一个Promise/Deferred对象,但是当有三个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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接