как асинхронно загружать облачные конечные точки apis

0
gapi.client.load('myapi1', 'v1', function() {
        gapi.client.load('myapi2', 'v1', function() {
             gapi.client.load('myapi3', 'v1', function() {
               $rootscope.$broadcast("All loaded")
             }, '/_ah/api');
            }, '/_ah/api');
        }, '/_ah/api');

Прямо сейчас эти apis загружаются один за другим. Я хочу, чтобы они загружались в async, и когда все apis загружены, я хочу передать сообщение. Является ли это возможным. Если да, то как?

Пример был бы очень полезен

  • 0
    Вы попали туда в некотором роде калькулятора :-). посмотрите на docs.angularjs.org/api/ng/service/$q
Теги:
google-cloud-endpoints

2 ответа

0
Лучший ответ
var counter = 
    gapi.client.load('api1', 'v1', function() {counter--}, '/_ah/api');
    gapi.client.load('api2', 'v1', function() {counter--}, '/_ah/api');
    gapi.client.load('api3', 'v1', function() {counter--}, '/_ah/api');

    var check_if_apis_are_loaded = function(){ 
        console.log(counter)
        if(counter == 0){
            $rootscope.$broadcast("All loaded");
            clearInterval(intervalId)
        }
    }
    var intervalId = setInterval(check_if_apis_are_loaded, 300);

Я не мог понять, но вышеупомянутый ответ не работает иногда, поэтому я создал работу для меня

1

Вы можете попробовать smt следующим образом:

 call_1 = gapi.client.load('myapi1', 'v1', function() {}, '/_ah/api');
 call_2 = gapi.client.load('myapi2', 'v1', function() {}, '/_ah/api');
 call_3 = gapi.client.load('myapi3', 'v1', function() {}, '/_ah/api');

$q.all([call_1, call_2, call_3]).then(function() {
  $rootscope.$broadcast("All loaded");
}

Служба $ q будет ждать завершения всех вызовов, а затем транслирует ваши сообщения.

Надеюсь, поможет.

Также я прочитал бы документы $ q и отличную статью на callbackhell

Ещё вопросы

Сообщество Overcoder
Наверх
Меню