2015-05-11 131 views
5

我有一个问题,同步加载脚本并执行它们与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/Deferred,但我该如何做3个Deferred对象呢?

代码文件1至文件3之前加载上面调用3个函数(func1的,FUNC2和FUNC3)...

回答

4

我认为第一,然后调用必须返回一个无极/递延,但怎么办我用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一个更完整的解决方案。