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时我想广播该消息。可能吗。如果是的话怎么样?
一个例子会很有帮助
答案 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 docs和callbackhell
上的精彩文章答案 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);
我无法理解,但上述答案有时无效,所以我为我创作了一个工作