【问题标题】:AngularJS $resource Error Handing with CallbackAngularJS $resource 错误处理与回调
【发布时间】:2014-07-30 22:37:14
【问题描述】:

我有一个工厂,它有多种服务来查询我构建的自定义 API。回调都有效,但我想知道如何在获取时进行任何错误处理。

.factory('customApiService', function ($resource) {
      return {
          yelp: function (businessId, callback) {
              var api = $resource('../../api/Yelp/:businessId', {
                  businessId: businessId
              }, {
                  fetch: 'JSONP',
                  'query': { isArray: false }
              });

              api.fetch(function (response) {
                  callback(response);
              });
          },
          tripAdvisor: function (hotelId, callback) {
              var api = $resource('../../api/TripAdvisor/:hotelId', {
                  hotelId: hotelId
              }, {
                  fetch: 'JSONP',
                  'query': { isArray: false }
              });

              api.fetch(function (response) {
                  callback(response);
              });
          }
      }
  });

还有一个在控制器中使用这个工厂的例子:

.controller('yelpCtrl', [
  '$scope', 'customApiService', function ($scope, customApiService) {

      customApiService.yelp("yelpIdHere", function (d) {
          //On successful callback run code
      });

      customApiService.tripAdvisor("tripAdvisorIdHere", function (d) {
          //On successful callback run code
      });
   }
])

目前如果有任何错误响应(404、500、504 等),则不会触发回调。

【问题讨论】:

标签: angularjs ngresource


【解决方案1】:

必须更改我的工厂以返回 errorCallback 以及成功的回调:

.factory('customApiService', function ($resource) {
  return {
      yelp: function (businessId, callback, errorCallback) {
          var api = $resource('../../api/Yelp/:businessId', {
              businessId: businessId
          }, {
              fetch: 'JSONP',
              'query': { isArray: false }
          });

          api.query(function (response) {
              callback(response);
          },
          function (error) {
              errorCallback(error);
          });
      },
      tripAdvisor: function (hotelId, callback, errorCallback) {
          var api = $resource('../../api/TripAdvisor/:hotelId', {
              hotelId: hotelId
          }, {
              fetch: 'JSONP',
              'query': { isArray: false }
          });

          api.query(function (response) {
              callback(response);
          },
          function (error) {
              errorCallback(error);
          });
      }
  }
});

所以现在在控制器中,我有第二个函数作为我的工厂调用的参数,它将处理任何错误:

.controller('yelpCtrl', [
  '$scope', 'customApiService', function ($scope, customApiService) {

      customApiService.yelp("yelpIdHere", function (d) {
          //On successful callback run code
      },
      function(e){
          //Do error handling here
      });

      customApiService.tripAdvisor("tripAdvisorIdHere", function (d) {
          //On successful callback run code
      },
      function(e){
          //Do error handling here
      });
   }
])

This answer 似乎有帮助

【讨论】:

    【解决方案2】:

    解决方案可能是使用$promise。 ngResource 实例和集合都有$promise,因此不要使用$resource 对象,而是使用带有成功、错误和最终方法的promise。 see $q doc on angular site

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多