Я пытаюсь сделать HTTP-цепочку. Если статус HTTP не равен 200, тогда я хочу выйти из цепочки обещаний. Но с моим текущим решением он выполняется до конца даже в случае ошибки или не 200 статуса.
factory.login=function(username,password){
var url=String(myconfig.url)+"authentication/token/new";
var requestToken="";
var sessionID="";
var defer=$q.defer();
$http({
url:url,
params:{
api_key:"my API Key",
}
}).then(validateWithLogin,HTTPErrorHandler)
.then(getSessionID,HTTPErrorHandler)
.then(function(data){
if (data.status!=200){
defer.reject(data);
}
sessionID=data.data.session_id;
$cookies.put("sessionid",sessionID);
},HTTPErrorHandler);
function HTTPErrorHandler(data){
console.log("HTTP Error happened");
console.log(data);
defer.reject("http error");
}
function validateWithLogin(data){
if (data.status!=200){
defer.reject(data);
}
requestToken=data.data.request_token;
console.log("validate with login"+data);
return $http({
url:String(myconfig.url)+"authentication/token/validate_with_login",
params:{
api_key:"my API Key",
username:username,
password:password,
request_token:requestToken
}
})
}
function getSessionID(data){
if (data.status!=200){
defer.reject(data);
}
return $http({
url:String(myconfig.url)+"authentication/session/new",
params:{
api_key:"my API Key",
request_token:requestToken
}
})
}
};
Потому что этого недостаточно, чтобы просто отказаться от вашего обещания, но вы должны вернуться с отложенным объектом.
Я бы предложил использовать его sorthand версию: return $q.reject();