2014-10-14 2 views
0

Я пытаюсь загрузить данные из нескольких источников и хочу продолжить обработку только после загрузки всех данных. Вот мой код:JavaScript: ожидание завершения каждого асинхронного вызова

var tables = []; 
$http 
    .get('/tables') 
    .then(function (response) { 
     _.each(response.data, function (table) { 
      tables.push(table); 
     }); 
    }) 
    // get detail data 
    .then(function() { 
     _.each(tables, function (table) { 
      $http.get('/tables/' + table) 
       .success(function (data) { 
        process(data); 
       }); 
     }); 
    }) 
    .then(function() { 
     // after everything loaded 
     // run this function 
    }); 

Благодарим за помощь!

ответ

0

Вы должны использовать следующее:

.then(function() { 
    return $q.all(_.map(tables, function (table) { 
     return $http.get('/tables/' + table) 
     .success(process); 
    }); 
}) 

Unrelated к основной части вашего вопроса, но учтите, что вам не нужно, чтобы определить все новые анонимные функции для .success, если вы только собираетесь передайте параметр в process().

См. Также: $q promise with Underscore _each

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