完成异步循环后调用函数

时间:2015-11-08 14:08:19

标签: javascript jquery ajax

例如,我们关注代码:

var data = [obj, obj, obj];

function handler(k, v) {
  ...
  check(v, function() {});
}

function check(params, callback) {
  ...
  request(options, callback);
}

function request(opts, callback) {
  $.ajax({
    ...
    opts
    ...
    callback
  });
}

$.each(data, handler);

我们如何等待完成$.each并调用某些功能?例如,看起来像:

$.when($.each(data, handler)).then(alert(1));

我找不到解决方案。

P.S。我们无法知道数据的长度。

P.S。这不是重复的,因为代码使用promises或非常漂亮的东西道歉

2 个答案:

答案 0 :(得分:0)

我建议查看q库并开始使用promises来解决这个问题。您还可以在上一个回调中添加每个回调,创建第一个Pyramid of Doom

答案 1 :(得分:0)

您需要返回jqXHR对象并将它们堆叠在一个$.map的数组中:

var data = [obj, obj, obj];

function handler(v, i) {
  ...
  return check(v, function() {});
}

function check(params, callback) {
  ...
  return request(options, callback);
}

function request(opts, callback) {
  return $.ajax({
    ...
    opts
    ...
    callback
  });
}

$.when($.map(data, handler)).then(function(){

  });