【问题标题】:How to use jQuery.when() with an array of URLs?如何将 jQuery.when() 与 URL 数组一起使用?
【发布时间】:2015-05-02 00:51:14
【问题描述】:

我将如何改变这个例子

$.when(
   $.getScript( "/mypath/myscript1.js" ),
   $.getScript( "/mypath/myscript2.js" ),
   $.getScript( "/mypath/myscript3.js" ),
   $.Deferred(function( deferred ){
      $( deferred.resolve );
   })
).done(function() {
   //place your code here, the scripts are all loaded
});

当我不知道要加载和使用 URL 数组的脚本的确切数量时?

var urls = [
   '/url/to/script1.js',
   '/url/to/script2.js',
   '/url/to/script3.js',
   '/url/to/script4.js'
];

由于上面的例子是一个带参数的函数调用,我不能使用像$.each() 这样的循环,可以吗?另外,我知道Function.apply,但不知道如何适应从将简单参数数组传递给函数到将函数调用数组传递给函数。

【问题讨论】:

    标签: jquery jquery-deferred .when


    【解决方案1】:

    您可以使用.apply,然后使用arguments 获取它:

    var urls = [
       '/url/to/script1.js',
       '/url/to/script2.js',
       '/url/to/script3.js',
       '/url/to/script4.js'
    ];
    
    var requests = urls.map(function(url){ return $.getScript(url); });
    $.when.apply($, requests).then(function(){
        console.log(arguments); // logs all results, arguments is the results here
        return [].slice.call(arguments);
    }).then(function(arr){
         // access as an array
    });
    

    【讨论】:

    • 据我了解,映射已经获取了脚本,对吧?我也有这个想法,但不确定这是否是正确的方法,因为$.when() 观看并等待所有加载完成。但经过更多思考后,我了解到在我的示例和您的示例中,$.when() 的参数始终是每个$.getScript() 调用的返回值。我还不明白你的两个$.then() 声明和esp。不是你返回那里的原因和内容。你介意添加更多的 cmets 来澄清那里发生了什么吗?
    • 你为什么使用两个链接的.then() 处理程序。第一个中没有可用的东西,第二个中没有,它们之间没有异步。
    • 两个.then()s 确实不是绝对必要的。以这种方式编写,第一个 .then() 用作适配器,允许第二个 .then() 以“标准化”形式接收结果 - “履行值数组” - 如 this draft standard 中所述。因此,这种双然后模式有某种逻辑。
    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 2017-04-23
    • 2012-01-20
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多