在一组promises上遇到jQuery问题

时间:2015-03-02 18:29:48

标签: javascript jquery ajax

function bar() {

  var promiseArray = [];

  $.each(options, function (index, option) {
    promiseArray.push(
      someAjaxFunction(option)
    );
  });

  return $.when.apply($, promiseArray);
}

我有这个功能bar()

在以下情况下调用:

foo().then(bar()).then(function (data) { console.log(arguments); console.log(data); });

哪个注销

["OK↵sdfadsfasd/sdfadsfads"]

(其中随机字母是与上下文相关的字符串,但不是远程应该返回的字符串)

如果在bar内而不是返回承诺,我会这样做:

return $.when.apply($, promiseArray).then(function(){ console.log(arguments) });

按预期工作并返回一个对象数组,这些对象是ajax请求主体的内容

我猜这与$ .when.apply在一个未指定数量的ajax调用上有关

谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要将bar函数作为参考传递。

foo().then(bar())

应该是

foo().then(bar)

.then(bar())意味着您将延迟传递给then作为参数。您需要将函数传递给then作为参数。您传递的函数可能会返回延迟。


如果您希望bar仍然作为.then(bar())立即执行,则需要重写bar,以便返回一个返回延迟的函数:

function bar() {

  var promiseArray = [];

  $.each(options, function (index, option) {
    promiseArray.push(
      someAjaxFunction(option)
    );
  });

  //this function gets passed to `.then` and its return value is used
  //for the purpose of chaining deferreds
  return function () {
    return $.when.apply($, promiseArray);
  };
}