如何异步加载云端点 api

how to load cloud endpoints apis asynchronously

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');

目前正在陆续加载这些api。我希望它们异步加载,当所有 api 加载完毕后,我想广播消息。可能吗。如果是怎么办?

一个例子会很有帮助

你可以像这样尝试 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 docs and a great article on callbackhell

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);

我想不通,但上面的答案有时不起作用,所以我为自己创建了一个解决方法