2015-11-03 2 views
0

Я зову Jquery асинхра звонков в цикл, как, что:Подождите, пока все асинхронный вызова закончены

for (var index = 0; index < activeSheets.length; index++) { 
      service.getAsync().then(donecallback, failcallback); 
} 

и когда я получаю donecallback, основываясь на данных, возвращаемый мне нужно запустить еще один цикл и запустить еще звонки,

Есть ли какой-либо приятный простой способ подождать, пока все они будут закончены, и посмотрите, все ли они прошли или некоторые провалились?

+2

см. Http://stackoverflow.com/questions/6538470/jquery-deferred-waiting-for-multiple-ajax-requests-to-finish –

ответ

2

Использовать API с отложенным jQuery. https://api.jquery.com/jquery.when/

Он ожидает нескольких обещаний в качестве аргументов.

$.when(promise, promise, promise) 
    .done(function success() { }) 
    .fail(function failure() { }) 
    .always(function always() { }); 

Затем он решает, будут ли все обещания успешными или не удастся, если какой-либо из них потерпит неудачу.

+1

Вы не можете передать этот массив массив обещаний jq '$ .when() 'метод, это должно быть, например:' $ .when.apply ($, [обещание, обещание, обещание]) ' –

+0

Я делаю. Спасибо. –

0

Вы, вероятно, ищете Promise.all(), он будет выполнять все обещания, и ждать, пока они всех прохода или один из них терпит неудачу.

var asyncs = []; 
for (var index = 0; index < activeSheets.length; index++) { 
    asyncs.push(service.getAsync()); 
} 
Promise.all(asyncs).then(donecallback, failcallback); 
Смежные вопросы