サーバー側と通信する上で必須なコールバック処理方法を書いてみました。
環境はAngular1.5とjavascriptです。
基本の形
コールバック処理で重要なのは非同期処理を操作できるオブジェクトPromiseです。
以下のコードはコントローラーからDI化したpromiseServise.jsのpromiseFunctionを呼び出して
色々処理してくれるのをsingularPromiseControllerは待ってる。という処理です。
待っている部分は~promiseFunction.then( 部分の.thenで待っているよ~という合図になります。
angular.module('myApp')
  .controller('SingularPromiseController', SingularPromiseController);
SingularPromiseController.$inject = ['PromiseServise'];
function SingularPromiseController(PromiseServise) {
  function singularPromiseFunction() {
    PromiseServise.promiseFunction.then( //ここでpromiseFunctionの結果を待つ
      function(data) { //resolveなどの引数に入っているオブジェクトがdataに入っている
        console.log('結果', data); 
    });
  }
}
そしてpromiseServise.jsではresolve・rejectでsingularPromiseControllerに処理の終了を通知しています。
angular.module('myApp')
  .servise('PromiseServise', PromiseServise);
PromiseServise.$inject = [];
function PromiseServise() {
  var servise = {
    promiseFunction: promiseFunction
  };
  return servise;
  var truthvalue = true;
  function promiseFunction() {
    return new Promise(function(resolve, reject) {
      if (truthValue) {
        var data = "成功";
        resolve(data); //singularPromiseFunctionに成功の結果を通知する
      } else {
        var err = "失敗" //singularPromiseFunctionに失敗の結果を通知する
        reject(err);
      }
    });
  }
}
応用編(複数待つ場合)
Promiseは複数のコールバック処理を待つ事ができます。
先程のpromiseServise.jsは一切変えずにpluralPromiseController.jsからpromiseServise.jsのpromiseFunctionを複数回呼び出してみます。
重要なのは$qで、$q.all(配列)とするとpromiseFunctionを全て呼び終わるまで待ってくれます。
angular.module('myApp')
  .controller('PluralPromiseController', PluralPromiseController);
PluralPromiseController.$inject = ['$promise', '$q', 'PromiseServise'];
function PluralPromiseController($promise, $q, PromiseServise) {
  var array = [1,2,3];
  function pluralPromiseFunction(){
    var promiseList = [];
    angular.forEach(array, function(value, key) {
        promiseList.push(PromiseServise.promiseFunction().$promise); //一回のpromiseFunctionの結果をプッシュ
    });
    $q.all(promiseAll).then(function(responseArray) { //全部呼ぶまで待機
        console.log("結果1", responseArray[0]); 
    });
  }
}
注意
resolveやrejectに複数のオブジェクトを渡したい時、
resolve(hoge, huga)
と書きたくなるのですが、resolveなどは第一引数しか結果を入れられません。
ですので、複数のオブジェクトを渡したい時は配列にオブジェクトをpushして配列をresolveの引数に入れましょう。
resultList.push(hoge, huga);
resolve(resultList)