异步使用getScript加入加载脚本

问题描述 投票:1回答:2

我想用从路径/js/testscript.js, /js/testscript.js功能是依赖从qaz​​xswpoi,但通话/script5.jstestscript.js负荷 我究竟做错了什么?脚本依赖。

$(this).testscript();
javascript jquery deferred getscript .when
2个回答
1
投票

第二Deferred对象成为解决尽快DOM完成加载,它不会等待getScript加入()方法(因为那些理论上可以这样以后执行,所以他们没有得到特殊待遇)。

$.when ( $.getScript('/script.js').done(function() { $.getScript('/script2.js'), $.getScript('script3.js').done(function() { $.getScript('/script4.js').done(function() { $.getScript('/script5.js').done(function() { $.getScript( "/js/testscript.js" ).done(function() { console.log("LOADED 2"); }) }) }) }) }), $.Deferred(function(deferred) { $( deferred.resolve ); }) ).done(function() { console.log("TEST"); $( ".test" ).each(function() { console.log("LOADED 1"); $(this).testscript(); //function from /js/testscript.js }); }); 完成加载,而不是在所有的脚本已经完成加载的第一个Deferred对象成为解决。在这一点上,doneCallback加载/script.js被调用,但对于/scripts2.js的doneCallback也已经叫,因为它是通过两个递延对象是在这一点上得到解决。

你应该把$.when(...)回调的doneCallback为$(this).testscript();,不为getScript("/js/testscript.js")声明,如下所示:

when(...)

0
投票

$.when( $.getScript('/script.js').done(function() { $.getScript('/script2.js'), $.getScript('script3.js').done(function() { $.getScript('/script4.js').done(function() { $.getScript('/script5.js').done(function() { $.getScript( "/js/testscript.js" ).done(function() { console.log("LOADED 2"); $( ".test" ).each(function() { console.log("LOADED 1"); $(this).testscript(); //function from /js/testscript.js }); }) }) }) }) }), $.Deferred(function(deferred) { $( deferred.resolve ); }) ).done(function() { console.log("TEST"); }); 似乎返回一个$.getScript所以你可以并行使用,然后Promise使用Promise.all加载相关脚本加载非依赖脚本。

在下面的例子中,promise chaining取决于bar.js而其余没有它们之间的依赖关系:

foo.js
© www.soinside.com 2019 - 2024. All rights reserved.