如何异步加载云端点 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);
我想不通,但上面的答案有时不起作用,所以我为自己创建了一个解决方法
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);
我想不通,但上面的答案有时不起作用,所以我为自己创建了一个解决方法