Как связать вызовы Angular $ http.get ()?

17

У меня есть контроллер, которому нужно получить два отдельных ресурса REST, которые будут заполнять два выпадающих меню. Я хотел бы избежать заполнения каждого из них до тех пор, пока не вернутся вызовы $ http.get (), так что выпадающие списки будут заполнены одновременно, вместо того, чтобы просачиваться один за другим.

Можно ли связать вызовы $ http.get () и изящно установить переменные $ scope для обоих возвращенных массивов, без необходимости писать логику состояния для обоих сценариев, например. a возвращает до b, b возвращается до?

    
задан brushleaf 31.03.2013 в 06:34
источник
  • FYI - заголовок вопроса говорит «цепочка», но тело описывает соединение. Не уверен, что редактирование здесь подходит. –  Kevin Hakanson 05.11.2015 в 01:59

3 ответа

36

Возвращаемое значение вызова функции Angular $ http является объектом Promise , используя $ q (обещание / отложенная реализация, вдохновленная     

источник
  • Что происходит с ошибкой ()? Будет ли это доступно в массиве результатов? –  brushleaf 31.03.2013 в 17:09
  • см. примечание к документации о любом отказе, приводит к отказу –  Kevin Hakanson 31.03.2013 в 17:27
  • Это не «цепочка», а «связанная» –  percebus 29.10.2014 в 21:22
  • @brushleaf, если вы хотите обрабатывать ошибки, просто добавьте вторую функцию, а затем вызовите после успешного обратного вызова. –  Capaj 13.01.2015 в 22:53
  • это не должно быть принятым ответом –  Marwen Trabelsi 05.11.2015 в 01:24
Показать остальные комментарии
6

Вы имеете в виду что-то вроде этого:

function someController( $scope, $http, $q ) {
    var first_meth = $http.get("first_url"),
        second_meth = $http.get("second_url");
    $q.all([first_meth, second_meth]).then(function(all_your_results_array) { 
        //here you'll get results for both the calls
    });
}

Ссылка: Угловой JS Doc

    
ответ дан Sudhir Bastakoti 31.03.2013 в 06:53
источник
0

Здесь вы можете использовать библиотеку java-скриптов Async: Ссылка .

Используйте вызов серии. Он сделает 2 вызова, а затем вызовет один обратный вызов, когда оба выполнены.

    
ответ дан user1007983 08.08.2013 в 16:36
источник