2016-08-10 8 views
1

Wie kann ich den Rückruf, der von einem Versprechen behandelt werden soll, als Parameter an die aufrufende Funktion übergeben? Zum Beispiel habe ichAngular pass callback for promise

$scope.caller = function() { 
    $http({...}).then(successCallback(response) { 
     ... 
    }, function errorCallback(response) { 
     ... 
    }); 
} 

Wie kann ich eine anonyme Funktion $scope.caller() passieren ausgewertet werden, wenn das Versprechen abgeschlossen?

Antwort

2

Sie können Ihre Funktion als Parameter an $ scope.caller übergeben.

$scope.caller = function (somefunc) { 
    $http(..).then(somefunc)); 
}; 
2

Sie möchten das?

$scope.caller = function(onFinal) { 
    $http({...}).then(successCallback(response) { 
     ... 
     onFinal(); 
    }, function errorCallback(response) { 
     ... 
     onFinal(); 
    }); 
} 
1

Sie können eine andere then an die Callback-Kette hinzu:

$scope.caller = function(callback) { 
    $http({...}).then(successCallback(response) { 
     ... 
     return response; // always return in your Promise to allow chaining 
    }, function errorCallback(response) { 
     ... 
    }).then(callback); 
} 

Wenn Sie $scope.caller rufen, Ihr Rückruf als Parameter übergeben:

$scope.caller(function(response) { 
    ... 
}); 
0
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', [ 
     ]); 
})();