如何异步加载云端点apis

时间:2015-12-14 10:07:47

标签: javascript angularjs api google-cloud-endpoints

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时我想广播该消息。可能吗。如果是的话怎么样?

一个例子会很有帮助

2 个答案:

答案 0 :(得分: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 docscallbackhell

上的精彩文章

答案 1 :(得分: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);

我无法理解,但上述答案有时无效,所以我为我创作了一个工作