You need to defer, resolve and return your promises in a 'Factory' or 'Services' file.
Here is a very straightfoward way of handling promises.
Note that '$scope.caller = function() {...}' is the same as 'function caller() {...}'.
Always have your API calls in the 'Factories' or 'Services' file.
Refer to example below :
//------------------------------------------------------------------------------------
# caller.factory.js
# 'app.foo.caller' refers to your directory structure i.e. app/foo/caller/caller.factory.js
(function() {
'use strict';
angular
.module('app.foo.caller', [])
.factory('callerSvc', CallerService);
/* @ngInject */
function CallerService(
$log,
$q,
$http,
$window,
$state,
logger,
session,
utils,
API_CONFIG) {
var ENDPOINTS = {
CALLERS: '/v1/callers'
};
/**
* @ngdoc service
* @name app.foo.caller
* @description Caller management
*/
var service = {
caller: caller
};
/**
* @ngdoc method
* @name caller
* @description Returns all callers
* @methodOf app.foo.caller
* @returms {promise} caller or null if not found
*/
function caller() {
var q = $q.defer();
var request = utils.buildAuthRequest(session, 'GET', ENDPOINTS.CALLERS);
$http(request)
.success(function (callers) {
q.resolve(callers.result);
})
.error(function (error) {
logger.error('CallerService.caller > Error ', error);
return q.promise;
}
}
})();
//------------------------------------------------------------------------------------
# caller.module.js
# 'app.foo.caller' refers to your directory structure i.e. app/foo/caller/caller.module.js
(function() {
'use strict';
angular
.module('app.foo.caller', [
]);
})();
:あなたは
$scope.caller
を呼び出すと、パラメータとしてコールバックを渡す
$scope.caller = function(callback) {
$http({...}).then(successCallback(response) {
...
return response; // always return in your Promise to allow chaining
}, function errorCallback(response) {
...
}).then(callback);
}