Javascript angularjs处理$resource$承诺错误
如果连接到我的API时出现错误,有人能帮我弄清楚如何在AngularJS工厂中返回硬编码数据吗。我的硬编码数据位于另一个名为“数据工厂”的工厂。感谢您的帮助Javascript angularjs处理$resource$承诺错误,javascript,angularjs,angular-resource,angular-promise,Javascript,Angularjs,Angular Resource,Angular Promise,如果连接到我的API时出现错误,有人能帮我弄清楚如何在AngularJS工厂中返回硬编码数据吗。我的硬编码数据位于另一个名为“数据工厂”的工厂。感谢您的帮助 service.factory("ScheduleFactory", ['$http', '$resource', '$q', 'dataFactory', function($http, $resource, $q, dataFactory) { var objFactory = {}; objFacto
service.factory("ScheduleFactory", ['$http', '$resource', '$q', 'dataFactory', function($http, $resource, $q, dataFactory) {
var objFactory = {};
objFactory.getDaysOfWeek = function(includeWeekends) {
var days = [];
var API = $resource(restURL + '/daysOfWeek/');
API.query()
.$promise
.then(function(data) {
isEmpty = (data.length === 0);
if (!isEmpty) {
days = data;
};
})
.catch(function(error) {
console.log("rejected " + JSON.stringify(error));
var data = null;
days = dataFactory.daysOfWeek;
console.log(days.length); // returns 5
});
console.log("after promise " + days.length); // returns 'after promise 0'
return days;
};
我的数据工厂定义如下:
dataApp.factory("dataFactory", function() {
objDataFactory = {};
objDataFactory.daysOfWeek = [
{ dayName: 'Monday'
, dayAbbrev: 'Mon'
, index: 1
, isSelected: false
, isWeekday: true }
, { dayName: 'Tuesday'
, dayAbbrev: 'Tue'
, index: 2
, isSelected: false
, isWeekday: true }
, { dayName: 'Wednesday'
, dayAbbrev: 'Wed'
, index: 3
, isSelected: false
, isWeekday: true }
, { dayName: 'Thursday'
, dayAbbrev: 'Thu'
, index: 4
, isSelected: false
, isWeekday: true }
, { dayName: 'Friday'
, dayAbbrev: 'Fri'
, index: 5
, isSelected: false
, isWeekday: true }
];
return objDataFactory;
});
我想这就是你想要的:
service.factory("ScheduleFactory", ['$http', '$resource', '$q', 'dataFactory', function($http, $resource, $q, dataFactory) {
var objFactory = {};
objFactory.getDaysOfWeek = function(includeWeekends) {
var API = $resource(restURL + '/daysOfWeek/'), defObj = $q.defer();
var daysQuery = API.query();
daysQuery.$promise.then(function(data) {
//you can add anything else you want inside this function
defObj.resolve(data);
}, function(error) {
//you can add anything else you want inside this function
defObj.resolve(dataFactory.daysOfWeek);
});
return defObj.promise;
};
我跳过了任何数据格式和作业详细信息,因为您随时可能更改它们。通过将API查询包装在一个额外的承诺中,您可以获得操作返回内容的能力。如果您的API可以访问,那么您将以外部承诺的分辨率从中返回数据。否则,您将以外部承诺的解析方式从其他服务返回硬编码数据。无捕获块,请使用常规错误回调函数:
API.query()
.$promise
.then(function(data) {
isEmpty = (data.length === 0);
if (!isEmpty) {
days = data;
},
function(error) { // removed catch here
console.log("rejected " + JSON.stringify(error));
var data = null;
days = dataFactory.daysOfWeek;
console.log(days.length); // returns 5
...
见下表:
然后(successCallback,errorCallback,,notifyCallback)–无论承诺何时被解决或拒绝,只要结果可用,就异步调用其中一个成功或错误回调。调用回调时只需一个参数:结果或拒绝原因。此外,在承诺被解决或拒绝之前,notify回调可能被调用零次或多次以提供进度指示
@谢谢你的反馈。尝试了您的解决方案并运行到console.log语句“returns 5”。然而,一旦退出承诺呼叫,“天”仍然没有填充“承诺后”仍然显示0。错误说明了什么?这是我首先要解决的问题。您的问题是关于处理错误的,老实说,我没有检查服务失败的原因。@shomz-除了404之外,没有返回任何控制台错误。对不起,我的问题不清楚。我想要处理的错误是当我的API未连接时。我尝试了错误回调,但没有任何记录被返回。姆比埃尔斯基的解决方案成功了。谢谢你的帮助。@MBielski谢谢你的反馈。尝试了您的解决方案,但除了API中的404之外,它也没有返回任何错误。我在控制器中分配了varPromise=ScheduleFactory.getDaysOfWeek()。然后执行:varPromise.Then(函数(数据){$scope.days=data});没有成功。我做错了吗?抱歉,在我的代码(第二个then子句)中看到了复制/粘贴问题,并将其删除。现在它应该可以正常工作了。不要使用!有趣的。。。我没有意识到这一点!谢谢你引起我的注意,贝基。