如何将参数传递给链式promises回调

时间:2014-08-09 09:57:03

标签: javascript promise q

如何使用q.promises

将参数传递给Sequence promise
var 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。任何建议都非常感谢。

1 个答案:

答案 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]));
}