【问题标题】:jquery multiple deferreds in thenjquery 中的多个延迟
【发布时间】:2015-05-11 07:41:59
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    我认为第一个 then 调用必须返回一个 Promise/Deferred,但是如何使用 3 个 Deferred 对象来做到这一点?

    您已经在为第一组脚本执行此操作 - $.when 返回一个承诺,该承诺在其所有承诺参数都已解决时解决。

    您也应该将它用于第二组:

    $.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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 2017-01-31
      • 1970-01-01
      • 2013-11-06
      • 2017-05-19
      • 1970-01-01
      • 2017-10-05
      相关资源
      最近更新 更多