2014-01-10 3 views
0

Я сохраняю переменное число обещаний ajax в массиве. И когда все обещания сделать мне что-то другое:

$.when.apply($, promises).then(function(){ 
    var myArgs = []; 
    if(promises.length == 1){ 
     var myArgs = []; 
     myArgs[0] = arguments; 
    }else{ 
     myArgs = arguments; 
    } 

    for(i=0; i<myArgs.length; i++){ 
     fileArr[promise2File[i]]['prop1'] = myArgs[i][0].type; 
     fileArr[promise2File[i]]['prop2'] = myArgs[i][0].message; 
    } 
}); 

Когда я использую JQuery версии 1.6.1 она работает отлично. Однако, когда я переключаюсь на более позднюю версию (1.8.3), я получаю следующую ошибку js, когда есть более одного обещания ajax. Он отлично работает с одним обещанием:

Uncaught TypeError: Object [object Object] has no method 'progress'

Я проверил тип переменной promisses, чтобы убедиться, что это массив (с InstanceOf массива) и это.

В случае полезно это, как я заполнить массив обещаний:

var i = 0; 

for(var file in fileArr){ 
    if (fileArr.hasOwnProperty(file)){ 
      if(fileArr[file].hasOwnProperty('status')){ 
       if($.inArray(fileArr[file]['status'], ['held','submitted']) !== -1){ 
        promise2File[i] = file; // I need this to map each promise to the corresponding file 
        promises[i] = parent.myFunc('cancel', [file], false); //myFunc returns the ajax promise 
        i++; 
       } 
      } 
     } 
} 

Есть мысли, почему я получаю эту ошибку на новой версии JQuery?

+2

использование .done вместо .Затем, это функциональность изменилась в более поздних версиях JQuery. http://api.jquery.com/deferred.then/ –

ответ

2

в jQuery 1.8, эта версия .then была удалена и заменена на ту, которая вместо принятия завершенных/неработающих обратных вызовов принимает принятые/сбойные фильтры.

http://api.jquery.com/deferred.then/

Переход от .then к .done должно решить вашу проблему.

$.when.apply($, promises).done(function(){ 

.then после 1,8, по существу, такой же, как .pipe до 1,8

+0

Кевин, это все правда, но объясняет ли это сообщение об ошибке «Uncaught TypeError: Object [object Object] не имеет метода« progress »? Может быть, я тупой, но я не вижу этого. –

+0

С '.then()' как последним методом цепочки, не является ли академическим, является ли это pre/post 1.8? –

+0

Для меня кажется более вероятным, что 'parent.myFunc()' возвращает обещание, сгенерированное lib, отличное от jQuery, и что pre-1.8 был чем-то более терпимым к нему. –

Смежные вопросы