试图用承诺来下决心
trying to do a resolve with a promise
由于我正在处理的过滤器存在问题,我正在尝试用promise
进行resolve
,但是,我的决心还没有奏效。
这样做是因为在有人要求我做一个解决方案之前我做了一个问题,这是我从其他人那里得到的必须的逻辑解决方案。
控制台返回的内容如下:
localhost:1337/lines/sports/undefined:1
GET http://localhost:1337/lines/sports/undefined 400 (Bad Request)
看看我的代码:
应用.js
.state('app.sports', {
url:'/sports',
views:{
menuContent:{
templateUrl:'templates/sportsList.html',
controller:'SportsController',
resolve: {
Sports: function(SportsFactory, AuthFactory, $q) {
var defer = $q.defer();
console.log(AuthFactory);
AuthFactory.getCustomer().then(function() {
SportsFactory.getSports().then(function(sports) {
defer.resolve(sports);
});
});
return defer.promise;
}
}
控制器.js
.controller('SportsController', function($scope, $state,
AuthFactory, SportsFactory, Sports) {
$scope.query = '';
$scope.sports = Sports;
$scope.sports = [];
$scope.customer = {};
});
AuthFactory.getCustomer().then(function(customer) {
$scope.customer = customer;
SportsFactory.getSportsWithLeagues(customer).then(function(sports) {
if (sports.length) {
$scope.sports = sports;
}else {
AuthFactory.logout();
}
}, function(err) {
console.log(err);
});
}, function(err) {
console.log(err);
});
服务.js
.factory('SportsFactory', function($http, $q, AuthFactory,
LocalForageFactory, LeaguesFactory, CONSTANT_VARS) {
return {
getSports: function(agent) {
var defer = $q.defer();
LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS)
.then(function(sports) {
if (!_.isNull(sports)) {
defer.resolve(_.values(sports));
}else {
$http.get(CONSTANT_VARS.BACKEND_URL + '/lines/sports/' + agent)
.success(function(sports) {
//forcing array instead of object
sports = _.values(sports);
sports = _.sortBy(sports, function(sport) {
return sport.priority;
});
LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS, sports);
defer.resolve(sports);
})
.error(function(err) {
defer.reject(err);
});
}
});
return defer.promise;
},
getSportsWithLeagues: function(customer) {
var _this = this,
defer = $q.defer(),
rejection = function(err) {
defer.reject(err);
},
sportsLength;
LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS_LEAGUES)
.then(function(sportLeagues) {
if (!_.isNull(sportLeagues)) {
//forcing array instead of object
sportLeagues = _.values(sportLeagues);
defer.resolve(sportLeagues);
}else {
_this.getSports(customer.agent).then(function(sports) {
sportsLength = sports.length;
LeaguesFactory.getLeagues({
sportIds: _.pluck(sports, 'id'),
lineProfile: customer.lineProfile,
betLimit: customer.betLimit
}).then(function(leagues) {
_.each(sports, function(sport) {
sport.leagues = _.filter(leagues, function(league) {
return sport.id === league.sport.id;
});
});
//forcing array instead of object
sports = _.values(sports);
LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS_LEAGUES, sports);
defer.resolve(sports);
}, rejection);
}, rejection);
}
}, rejection);
return defer.promise;
}
};
});
这是身份验证工厂:
.factory('AuthFactory', function($q, $http, $state,
LocalForageFactory, CONSTANT_VARS) {
return {
/**
* This function logs the customer, if the customer exists,
* Customer data is saved in order to perform actions,
* if not, an error message is returned.
* @param credentials a json with this format {username: 'jhon', password:'D03'}
* @returns {Animation.promise|promise}
*/
login: function(credentials) {
var defer = $q.defer(),
_this = this;
$http.post(CONSTANT_VARS.BACKEND_URL + '/auth/login',
credentials
).success(function(data) {
if (data.error) {
defer.reject(data);
}
_this.setCustomer(data).then(function(customer) {
defer.resolve(customer);
}, function(err) {
defer.reject(err);
});
}).error(function(data, status) {
if (status === 0) {
data = new Error('Backend is down');
data.raw = {};
}
defer.reject(data);
});
return defer.promise;
},
setCustomer: function(customer) {
var defer = $q.defer();
LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_CUSTOMER, customer).then(function(customer) {
/*Removing LocalForage Items*/
LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_LEAGUES);
LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS_LEAGUES);
LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS);
defer.resolve(customer);
}, function(err) {
$state.go('app.login');
defer.reject(err);
});
return defer.promise;
},
updateCustomer: function(customer) {
var defer = $q.defer();
LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_CUSTOMER, customer).then(function(customer) {
defer.resolve(customer);
}, function(err) {
$state.go('app.login');
defer.reject(err);
});
return defer.promise;
},
getCustomer: function() {
var defer = $q.defer();
LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_CUSTOMER).then(function(customer) {
if (customer) {
defer.resolve(customer);
}else {
defer.reject(new Error());
}
defer.reject(customer);
}, function(err) {
defer.reject(err);
});
return defer.promise;
},
logout: function() {
var defer = $q.defer();
this.getCustomer().then(function(credentials) {
$http.post(CONSTANT_VARS.BACKEND_URL + '/auth/logout',
credentials
).success(function(data) {
if (data.error) {
defer.reject(data);
}
/*Removing LocalForage Items*/
LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_LEAGUES);
LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS_LEAGUES);
LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS);
LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_CUSTOMER);
defer.resolve(data);
}).error(function(data) {
defer.reject(data);
});
}, function(err) {
$state.go('app.login');
defer.reject(err);
});
return defer.promise;
},
updateToken: function(token) {
var _this = this,
defer = $q.defer();
this.getCustomer().then(function(customer) {
customer.token = token;
_this.updateCustomer(customer).then(function(savedCustomer) {
defer.resolve(savedCustomer);
}, function(err) {
defer.reject(err);
});
}, function(err) {
defer.reject(err);
});
return defer.promise;
},
customerInfo: function() {
var defer = $q.defer();
this.getCustomer().then(function(customer) {
$http.post(CONSTANT_VARS.BACKEND_URL + '/auth/info', customer)
.success(function(data) {
defer.resolve(data);
})
.error(function(err) {
defer.reject(err);
});
}, function(err) {
defer.reject(err);
});
return defer.promise;
}
};
});
在应用程序中.js你正在做 SportsFactory.getSports() ,但 getSports 需要 'agent' 参数。由于您没有使用"代理"来提供它,因此:"/lines/sports/"+agent等于:lines/sports/undefined,这就是为什么您得到400(错误请求)的原因。此代码可能还有其他问题,但这是错误消息的原因。
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- Nodejs和express路由,如何处理客户端的承诺
- 如何在多承诺链中处理谷歌地图API V3事件
- 承诺合并流
- JavaScript承诺-无法读取属性'那么'的未定义
- 等待循环调用的所有承诺完成
- Pg承诺性能提升:在冲突中
- 试图用承诺来下决心