如何使用q.promises
将参数传递给Sequence promisevar argumentsArray = ["PARAM1", "PARAM2", "PARAM3"]
var arr = [];
function aJaxCall(argumentsArray) {
var deferred = Q.defer();
$.ajax({
type: 'POST',
/*
Here i want to get the passed parameter and use it
in my post request
*/
url: 'someurl.com' + PARAMS,
// data: data,
dataType: 'text',
success: function (data) {
arr.push(data);
deferred.resolve(data);
}
});
return deferred.promise;
}
var result = Q();
for (var i = 0, len = argumentsArray.length; i < len; i++) {
/* Pass the argumentsArray[i]
for each then call, i want to be able to pass
the current argumentsArray value
*/
result = result.then(aJaxCall);
}
到目前为止,我尝试使用aJaxCall函数本身的属性 然后用arguments.calee.prop
处理它for (var i = 0, len = argumentsArray.length; i < len; i++) {
aJaxCall.prop = argumentsArray[i];
result = result.then(aJaxCall);
}
然后在aJaxCall函数中我试图得到这样的参数:
arguments.callee.prop
但它总是绑定argumentsArray中的最后一个元素,导致for循环完成,然后在循环中稍后触发.then。任何建议都非常感谢。
答案 0 :(得分:1)
您可以创建一个方法,该方法返回一个匿名函数,该函数使用传递的参数调用ajaxCall:
var callWithArgs = function(arg) {
return function () {
return ajaxCall(arg);
}
}
for (var i = 0, len = argumentsArray.length; i < len; i++) {
result = result.then(callWithArgs(argumentsArray[i]));
}