jQuery:数组中的函数立即调用when()done()

zer*_*gen 1 javascript arrays jquery asynchronous

我试图将一些Javascript函数推入一个数组,用jQuery.when()调用它们,但是当这样做时,函数在放入数组时就已经被调用了.这是一个例子,这是我的代码片段:

    var answers = someJSONFormattedData;
    var calls = [];

    function callWithIndex(i) {
        var answer = answers[i];
         api.loadUser(answer.userType, answer.userId, function(userData) {               
             answer.user = userData;
         }, null)
    };


    for(var i=0;i<answers.length;++i) {
        calls.push(callWithIndex(i));
    }


     $.when.apply($, calls).then(function() {
         var dataAsJSON = {
                 'answers': answers
         };
         //do some magic stuff with dataAsJSON           
     });
Run Code Online (Sandbox Code Playgroud)

即使在做一个简短的测试代码片段时,也会立即调用test()函数,尽管我根本不会调用它,因为我只将它放入一个数组中(或至少尝试).

var test = function(i) {
    console.log("test: "+i);
}

var testArray = [];
for(var i=0;i<5;++i) {
    testArray.push(test(i));
}
Run Code Online (Sandbox Code Playgroud)

hai*_*770 5

你需要push引用函数,而不是它的(undefined)结果:

试试这个:

calls.push(callWithIndex.bind(null, i));
Run Code Online (Sandbox Code Playgroud)