我有一个函数可以查看我的数据库是否有特定的链接。我不确定是否有可能做到这一点,或者我是否做错了。我正在使用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。有一个更好的方法吗?现在,它在进程完成之前抛出一个Not Found Error,我希望找到一种方法来忽略停止我的程序的错误。
答案 0 :(得分:0)
我认为,这里的逻辑存在一些缺陷,$ http.get()会返回一个promise。如果您收到http错误,它将无法解决。为了利用错误处理,您实际上必须传递一个错误处理函数,该函数将在promise promise中被调用。
$http.get(list[i]).then( success_handler, error_handler );
另外,正如Thomas在评论中提到的那样,你可能没有正确使用它。您的方法将启动所有get请求并返回。这些get请求的结果将在稍后发生,并且每个结果都将成功执行成功或错误处理程序。
答案 1 :(得分:0)
您可以创建一个promises数组,然后使用$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);