2015-04-02 2 views
1

Я создаю автономный режим в приложении. Всякий раз, когда отправляется HTTP-запрос, я хотел бы, чтобы перехватчик обнаружил состояние сети. Если состояние не является связностью, я бы хотел создать макет ответа и заставить его чувствовать себя так, как будто ответ приходит с сервера.Может ли запрос-перехватчик создать ответ http в angularJS

ответ

0

Вы можете проверить, если вы находитесь в Интернете или не читая статус ответа на ваш перехватчик, если его 401/501/и т.д.:

var interceptor = ['$rootScope', '$q', function ($rootScope, $q) { 
    function success(response) { 
     return response; 
    } 
    function error(response) { 
     var status = response.status; // error code 
     if ((status >= 400) && (status < 500)) { 
     $rootScope.broadcast("AuthError", status); 
     return; 
     } 
     if ((status >= 500) && (status < 600)) { 
     $rootScope.broadcast("ServerError", status); 
     return; 
     } 
     // otherwise 
     return $q.reject(response); 
    } 
    return function (promise) { 
     return promise.then(success, error); 
    } 
}] 

Там еще один способ, с помощью HTML5, но я думаю, не будет работать в некоторых браузерах. Это делается с помощью navigator.onLine свойства, как:

if (navigator.onLine) { 
    //I'm online 
} else { 
    I'm not online 
} 

(https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine)

0

Если вы бросаете объект внутри вашего запроса перехватчик это вызовет вызов перехватчика responseError, передавая объект как забросил его аргумент.

Вы должны найти способ оповестить responseError-перехватчик, что это не настоящая ошибка и что он должен вернуть пользовательский ответ.

Перехватчик responseError может выбрать для восстановления ошибки возвращения объекта ответа о провал возвращении отклоненного обещания (проверка угловой в $ HTTP-перехватчики документы)

EDIT: Если вы бросаете объект из запроса перехватчика вы не можете избежать сообщение об ошибке в консоли. Лучше вернуть отклоненное обещание передать объект конфигурации как значение и добавить дополнительную информацию в него для responseError обнаружить особую ситуацию.

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