2016-08-08 21 views
0

私はAngularJSとJavascriptをかなり使い慣れています。私は、すべてのajax関連操作(angularjsの工場)を行うために1つの関数を使用する予定のアプリケーションを作成しています。 この関数は、すべてのAjax操作で1つのゲートウェイになります。私が成功として約束を返すとき、それは適切に働く。エラーの約束を返すことはできません。約束による返品のエラー

ここにサンプルコードを示します。約束が失敗した場合、私は誤差関数に約束のリターンを期待していますが、それは成功

var myApp = angular.module('myApp', []); 

myApp.controller('FirstController, function($scope, util){ 
     util.doAjax().then(function(response){ 
       // This function is called in both success and error 
      }, function(err){ 
       // This is never called why ?     
      }); 
}); 

myApp.factory('util, function($http){ 
    return $http({ 
     method: 'GET', 
     url: 'http://www.example.com' 
    }).then(function(response){ 
     // This will return success promise 
     return response; 
    }, function(err){ 
     // This should return error promise 
     return err; 
    }); 
}); 
+0

このブログの記事はあなたを助けることができます:http://ericnish.io/blog/add-success-and-error-to-angular-promises/ – oguzhan00

答えて

0

に行く現在、あなたは直接約束をチェーン化して.then方法の基礎となる、それを呼び出すされ、誤差関数からデータを返すされています。

その他の重要なことがある

return $q.reject(err) 

$ qを使用すると、あなたが名前

myApp.factory('util', function($http, $q){ 
//Exposed method 
return { 
    doAjax : function() { 
     return $http({ 
      method: 'GET', 
      url: 'http://www.example.com' 
     }).then(function(response){ 
      // This will return success promise 
      return response.data; // returned data 
     }, function(err){ 
      // return error promise with err object 
      return $q.reject(err); 
     }); 
    } 
    } 
}); 
0
とサービスでメソッドを作成する必要がありますが、新しいカスタム約束を作成することによって、約束を拒否しなければならないエラーを返すものの

あなたは約束を返せません。あなたが代わりにそのような$はhttpの約束を返さなければなりません

myApp.factory('util', function($http){ 

    return { 
     ajax: function() { 
      var httpPromise = $http({ 
       method: 'GET', 
       url: 'http://www.example.com' 
      }); 

     httpPromise.then(function(response){ 
      // This will return success promise 
      // return response; 
     }, function(err){ 
      // This should return error promise 
      // return err; 
     }); 

     return httpPromise;   
    };   
}); 

そしてまた、約束の決議内側戻しが必要とされていないが、あなたはlogginやもののためにそれを使用することができますが、それは、戻り値を必要としません。それは解決であるので、自己です。