Как сделать HTTP цепочку в AngularJS

0

Я пытаюсь сделать 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
                }
            })
        }

    };
Теги:

1 ответ

3
Лучший ответ

Потому что этого недостаточно, чтобы просто отказаться от вашего обещания, но вы должны вернуться с отложенным объектом.

Я бы предложил использовать его sorthand версию: return $q.reject();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню