【问题标题】:Waiting for multiple deferred objects to complete等待多个延迟对象完成
【发布时间】:2013-01-29 01:46:22
【问题描述】:

当等待多个延迟对象完成时,为什么会这样:

$.when(tasks).then(function() {
    document.write("Completed all requests." + "<br/>");
});

立即执行,但

$.when.apply(null, tasks).then(function () {
    document.write("Completed all requests." + "<br/>");
});

等待任务完成。

【问题讨论】:

    标签: javascript jquery jquery-deferred


    【解决方案1】:

    when 函数不采用延迟数组。相反,您将每个 deferred 作为单独的参数传递。这正是apply 正在为你做的事情。

    null 被传递给 apply 只是因为这是 apply 所期望的:第一个参数是函数的上下文在调用时应该设置的内容,第二个参数始终是一个数组,它将被扩展,以便调用该函数,就好像数组中的所有项目都已作为单独的参数传入一样。

    因为对于when 而言,调用它的上下文没有区别,null 的工作原理与其他任何东西一样好。我更喜欢将 jQuery 本身传递给它:

    $.when.apply($, tasks).then(function () {
        // Whatever
    });
    

    因为我认为它看起来更干净,但这只是我。没有任何区别。


    如果您的浏览器支持原生 Promise(或者您正在使用 a polyfill),您可以改用其 all 方法,该方法直接采用一组 Promise:

    Promise.all(tasks).then(function (values) {
        // "values" is an array, with the results of each of the "tasks"
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多