2015-06-18 2 views
0

Я работаю в Угловом, и мне нужно обозначить ошибку для обещания дальше по цепочке, когда результат решается в .success().

вызвать функцию в моей службы от моего контроллера, как

myService.myFunction().then(
    function(results){ 
     // do success stuff 
    }, 
    function(err){ 
     // do failure stuff 
    }); 

MYFUNCTION что-то вроде

myFunction(){ 
    return $http.get('url') 
     .success(function(results){}) 
     .error(function(err){}) 
} 

Основываясь на определенных условиях, мне нужно иметь .then() выполнить errorCallback даже хотя $ http.get(). success() был запущен. Как я могу заставить его выглядеть так, как $ http получил ошибку?

ответ

4

Некоторые исправления, которые необходимо сделать для достижения этой цели, будут использовать then вместо функции success на $http.

И в обратном вызове then вы можете сделать return $q.reject(errorData), чтобы отклонить обещание по цепочке.

return $http.get('url').then(function(results){ 
    if(condition) { 
     return $q.reject(errorData); 
    } 
    return result.data; //then callback get a object with properties 
},function(error) { 
     return $q.reject(error); 
    }) 

success возвращает исходное $http обещание, тогда как then возвращает обещание, которое получает разрешенное с возвращаемым значением успеха и обратного вызова ошибки.

+0

Я думаю, проблема в том, что моя база данных была ошибкой, но сервер по-прежнему отправил код состояния 200. Является ли код состояния, как Angular определяет успех или неудачу http, и я могу достичь того же результата, отправив статус отказа из сервер? – user137717

+1

Да, это стандартный 'http'. 2xx - все успехи. Если сервер возвращает 4xx или 5xx, то вы перейдете к пути ошибки. – Chandermani

Смежные вопросы