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调用上有关
谁能看到我做错了什么?
答案 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);
};
}