为什么 google javascript 客户端库函数在 angularjs 框架中最后执行?
Why does the google javascript client library functions execute last within the angularjs framework?
我想这可能是我对 google javascript 客户端库的加载方式的误解,但是为什么 javascript api 调用在加载时优先级最低在 angularJS 框架内调用。我知道这听起来很复杂,所以这里有一个具体的例子。
这是一个完整的网络应用程序,因此我将缩小我认为最相关的代码范围。这是我在控制器中调用的函数。:
$scope.isRegistered = function () {
var joe = function () {
gapi.client.conference.isRegistered().
execute(function(resp){
$scope.$apply(function() {
if (resp.error){
$log.error('There was an Error');
}
else {
$log.info("Success");
return resp.data;
}
});
});
};
joe();
$log.info("testing");
};
我的 html(部分)中有这个作为要执行的测试用例:
<button ng-click="isRegistered()">IsRegs</button>
当我点击我的按钮时。我期望的是控制台首先打印出 gapi.client 函数,然后打印出 "testing" 字符串:
1.)"success"
2.)"testing"
它打印以下内容(抱歉没有足够的代表指向 post 一张图片):
1.)"testing"
2.)"成功
我 运行 更多测试,但最重要的是,我期望函数 joe() 在 $log.info("testing") 之前先执行。为什么 $log.info("testing") 先执行,然后 gapi 调用?
我将需要以特定顺序执行 gapi 调用,并且根据我的测试,它始终具有最低优先级。在实际执行 gapi 调用之前,它将始终执行并完成函数体的其余部分。
这是为什么?
我想按照我编写代码的顺序首先执行 gapi 调用,而不是最后。长话短说,如果没有按照我编写的顺序调用它,这会弄乱我其余代码的逻辑。
关于这是为什么的任何提示?我可以覆盖 gapi 调用以使其以第一优先级执行吗?
我仍在仔细阅读 google client javascript library 以获取更多线索。在这里的任何帮助将不胜感激。谢谢。
由于 Google API 请求的异步性质,"testing" 字符串总是首先打印(您在 $log.info("testing");
行执行后得到响应).获得所需结果的一种方法是使用 $q
服务:
// need to inject the $q service
$scope.isRegistered = function () {
var joe = function () {
var deferred = $q.defer();
gapi
.client
.conference
.isRegistered()
.execute(function (res) {
$scope.$apply(function () {
if (res.error) {
$log.error('There was an Error');
deferred.reject(res.error);
}
else {
$log.info("Success");
deferred.resolve(res.data);
}
});
});
return deferred.promise;
};
joe()
.then(function (data) {
$log.info("Got some data", data);
$log.info("testing");
});
};
我想这可能是我对 google javascript 客户端库的加载方式的误解,但是为什么 javascript api 调用在加载时优先级最低在 angularJS 框架内调用。我知道这听起来很复杂,所以这里有一个具体的例子。
这是一个完整的网络应用程序,因此我将缩小我认为最相关的代码范围。这是我在控制器中调用的函数。:
$scope.isRegistered = function () {
var joe = function () {
gapi.client.conference.isRegistered().
execute(function(resp){
$scope.$apply(function() {
if (resp.error){
$log.error('There was an Error');
}
else {
$log.info("Success");
return resp.data;
}
});
});
};
joe();
$log.info("testing");
};
我的 html(部分)中有这个作为要执行的测试用例:
<button ng-click="isRegistered()">IsRegs</button>
当我点击我的按钮时。我期望的是控制台首先打印出 gapi.client 函数,然后打印出 "testing" 字符串:
1.)"success" 2.)"testing"
它打印以下内容(抱歉没有足够的代表指向 post 一张图片):
1.)"testing" 2.)"成功
我 运行 更多测试,但最重要的是,我期望函数 joe() 在 $log.info("testing") 之前先执行。为什么 $log.info("testing") 先执行,然后 gapi 调用?
我将需要以特定顺序执行 gapi 调用,并且根据我的测试,它始终具有最低优先级。在实际执行 gapi 调用之前,它将始终执行并完成函数体的其余部分。
这是为什么?
我想按照我编写代码的顺序首先执行 gapi 调用,而不是最后。长话短说,如果没有按照我编写的顺序调用它,这会弄乱我其余代码的逻辑。
关于这是为什么的任何提示?我可以覆盖 gapi 调用以使其以第一优先级执行吗?
我仍在仔细阅读 google client javascript library 以获取更多线索。在这里的任何帮助将不胜感激。谢谢。
由于 Google API 请求的异步性质,"testing" 字符串总是首先打印(您在 $log.info("testing");
行执行后得到响应).获得所需结果的一种方法是使用 $q
服务:
// need to inject the $q service
$scope.isRegistered = function () {
var joe = function () {
var deferred = $q.defer();
gapi
.client
.conference
.isRegistered()
.execute(function (res) {
$scope.$apply(function () {
if (res.error) {
$log.error('There was an Error');
deferred.reject(res.error);
}
else {
$log.info("Success");
deferred.resolve(res.data);
}
});
});
return deferred.promise;
};
joe()
.then(function (data) {
$log.info("Got some data", data);
$log.info("testing");
});
};