2013-12-21 2 views
0

У меня возникает некоторая путаница в том, как применить объект jQuery $ .deferred для цикла асинхронного процесса, когда цикл имеет переменную длину , Ниже моя текущая попытка. Поскольку процесс в цикле является асинхронным, цикл завершится, и отложенный объект в главном будет разрешен до того, как все асинхронный процесс, запущенный в цикле, будет разрешен. С другой стороны, я получаю переменное количество разрешений, вызванных отложенным объектом внутри асинхронного процесса, по мере того как каждый заканчивается, оставляя довольно немного учета, чтобы определить, когда они все закончили.Определение разрешения переменного числа асинхронного процесса, вызванного в цикле с использованием jQuery отложенных, javascript

function asyncProcess(someVariable) { 
    var dfd = $.Deferred(); 
    //Some Code 
    dfd.resolve(); 
    return dfd.promise(); 
} 


function main() { 
    var dfd = $.Deferred(); 
    for (i = 0; i < variableInteger; i++) { 
     asyncProcess(someVariable); 
     dfd.resolve(); 
    } 
    return dfd.promise(); 
} 

Кто-нибудь знает, как эта ситуация обычно обрабатывается?

ответ

2

Используйте $.when(), чтобы создать новое обещание, которое будет разрешено, когда все обещания будут разрешены или кто-либо отклонен.

function asyncProcess(someVariable) { 
    var dfd = $.Deferred(); 
    //Some Code 
    dfd.resolve(); 
    return dfd.promise(); 
} 


function main() { 
    var prmis = []; 
    for (i = 0; i < variableInteger; i++) { 
     prmis.push(asyncProcess(someVariable)); 
    } 
    return $.when.apply($, prmis); 
} 
+0

Это похоже на перспективный подход, но у меня его нет на работе. Вы уверены, что мне не нужен отложенный объект в main()? –

+0

@BenPearce no .... –

+0

@BenPearce см. Http://jsfiddle.net/arunpjohny/LcCwx/1/ –

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