【问题标题】:Run jquery function after $.each has finished using promise在 $.each 使用 promise 完成后运行 jquery 函数
【发布时间】:2013-07-24 03:17:31
【问题描述】:

我有一个 each 循环来提取四方信息。它看起来类似于以下内容:

$.getJSON('https://api.foursquare.com/v2/venues/search?search_string_here',    
 function(data) {
     $.each(data.response.venues, function(i,venues){
          var content = foursquare stuff;
          $(content).appendTo("#fourSquare");
     });
});

我需要在每个循环完成后启动一个函数。如果放置在每个循环之后,这将起作用:

$( "#fourSquare" ).promise().done(function() {
    //do stuff
});

我不熟悉promise - 奇怪的是它适用于任何选择器。两个问题:

1) 这是进行每个回调的最佳方式吗? 2)这里正确的选择器是什么? each 没有迭代已经存在的元素,所以我不确定要“承诺”什么

【问题讨论】:

  • 当在一个元素上使用时,.promise 会获得一个 promise 对象,该对象引用一个延迟对象,该对象在所有排队的方法完成时解析,例如动画。它不跟踪 ajax 请求主要是因为 ajax 请求没有直接链接到元素。

标签: jquery loops each promise


【解决方案1】:

$.getJSON 将返回一个您可以使用的承诺。这将在回调之后调用

var $ajax = $.getJSON('url', function(data){
    // your $.each
});

$ajax.done(function(){
    // do stuff
});

【讨论】:

    【解决方案2】:

    你应该使用getJSON返回的promise:

    $.getJSON(...)
        .then(function() { $.each(...); })
        .then(function() { ... });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-20
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      相关资源
      最近更新 更多