如何忽略来自$http GET请求的错误消息?

How do you ignore error messages from an $http GET request?

本文关键字:请求 错误 消息 GET http 何忽略      更新时间:2023-09-26

我有一个函数,应该看看我的数据库是否有一个特定的链接。我不确定是否不可能做到这一点,或者如果我只是做错了。我正在使用Angular HTTP GET请求,如果找到了对象,我就尝试返回它。以下是我的文件:

var foo = function(list, value) {
  for(var i = 0; i < list.length; i++) {
    $http.get(list[i]).then(function(object) {
        var dbObject = object.data;
        if(contains(dbObject, value) {
            return list[i];
          }
        });
    }
  }
};

所以,我希望返回链接到包含该值的JSON对象的有效url。有更好的方法吗?现在,它抛出一个未找到的错误,在进程甚至完成之前,我希望找到一种方法来忽略停止我的程序的错误。

我认为,这里的逻辑有一些缺陷,$http.get()返回一个承诺。它将无法得到解决,如果你得到http错误。为了使用错误处理,实际上必须传递一个错误处理函数,该函数将在拒绝承诺时调用。

 $http.get(list[i]).then( success_handler, error_handler );

另外,正如Thomas在评论中提到的,你可能没有正确使用它。您的方法将启动所有get请求并返回。这些get请求的结果将在稍后出现,并在每个结果上执行成功或错误处理程序。

您可以创建一个承诺数组,然后使用$q.all方法返回并测试所有结果。

(function (ng) {
  'use strict';
  
  ng.module('HttpDemo')
    .factory('LinkChecker', LinkChecker)
    .controller('LinkCheckerDemoController', LinkCheckerDemoController);
  
  function LinkChecker ($q, $http) {
    function LinkCheckerFunc (links, value) {
      return $q(function (resolve, reject) {
        var linkPromises = [];
      
        ng.forEach(links, function (link) {
          linkPromises.push($http.get(link));
        });
        
        $q.all(linkPromises)
          .then(_onGetLinksSuccess, reject);
        function _onGetLinksSuccess (responses) {
          var validLinks = [];
          ng.forEach(responses, function (linkToCheck) {
            var link = linkToCheck.data;
            if (contains(link, value) {
              validLinks.push(link);
            }
          });
          resolve(validLinks);
        }
      });
    }
    
    return (LinkCheckerFunc);
  }
  function LinkCheckerDemoController (LinkChecker, $log) {
    var linkCheckerDemoVM = this;
    linkCheckerDemoVM.checkLinks = checkLinks;
    // example usage
    function checkLinks () {
      var validLinks = new LinkChecker(
        linkCheckerDemoVM.links,
        linkCheckerDemoVM.value
      );
      validLinks.then(_onGetValidLinksSuccess, _onGetValidLinksError);
      function _onGetValidLinksSuccess (links) {
        $log.info('Valid Links', link);
      }
      function _onGetValidLinksError (err) {
        $log.error(err);
      }
    }
  }
})(angular);