我可以更改此代码以使其返回 promise 吗?
var calApi = {
fun3: function() {
gapi.auth.authorize(
{
'client_id': CLIENT_ID,
'scope': SCOPES.join(' '),
'immediate': true
}, calApi.fun2);
},
fun2: function(authResult) {
if (authResult && !authResult.error) {
calApi.fun4();
}
},
fun1: function(event) {
gapi.auth.authorize(
{client_id: CLIENT_ID, scope: SCOPES, immediate: false},
calApi.fun2);
return false;
},
fun4: function() {
gapi.client.load('calendar', 'v3', calApi.fun5);
},
fun5: function() {
// some code
// returning the result...
}
};
return calApi;
我的 Controller :
$scope.hanleAPICall = function(event) {
factoryName.fun1(event);
};
此代码取自谷歌calendar api我试图在 angularjs 工厂中实现它,但我需要从 api 返回事件的结果作为我返回事件的 promise ,但我的页面内没有任何反应。
最佳答案
您可以执行如下操作以返回服务 promise :
angular.module('app', [])
.factory('AppService', function ($q) {
return {
fun3: fun3
};
function fun3() {
var defer = $q.defer();
gapi.auth.authorize(
{
'client_id': CLIENT_ID,
'scope': SCOPES.join(' '),
'immediate': true
}, handleAuthResult);
function handleAuthResult (authResult) {
if (authResult && !authResult.error) {
defer.resolve(authResult);
} else {
defer.reject(authResult.error);
}
}
return defer.promise;
}
});
与上面类似,您可以为其他方法创建工厂方法 fun1, fun2, fun4, fun5
关于javascript - google calendar api 调用可以在 Angular 工厂内返回一个 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36907532/