2016-11-23 7 views
0

Я пытаюсь создать «перехватчик» для службы AuthHttp (angular2-jwt). Я создал класс, который расширяет AuthHttp и использует его. Пока все работает нормально. Теперь я хочу сделать это, если сервер отвечает кодом 401, чтобы заставить выйти из моего приложения и игнорировать следующие подписки (я не уверен, что эти подписки выполняются последовательно, поэтому я не знаю, m gonna ask возможно).Отменить наблюдаемую последовательность подписки в Angular 2

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

get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    let observable = super.get(url, options); 
    observable.subscribe(
     () => { }, 
     (error: Response) => { 
      if (error.status === 401) { 
       // Logout and ignore all other subscriptions 
      } 
     } 
    ); 

    return observable; 
} 

Возможно ли это?

Спасибо!

ответ

1

unsubscribe. Метод subscribe возвращает объект Subscription. Вы можете использовать это, чтобы отписаться:

get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    let observable = super.get(url, options); 
    let subscription = observable.subscribe(
     () => { }, 
     (error: Response) => { 
      if (error.status === 401) { 
       // Logout and ignore all other subscriptions 
       subscription.unsubscribe(); 
      } 
     } 
    ); 

    return observable; 
} 
+0

Спасибо за ответ, но я не понимаю, что бы я сделал с этим. В качестве теста я вставил ваш код и положил console.log с «unsubscribe». В другой подписке (в службе, которая вызывает rest api, используя .get() и подписывается на наблюдаемый), я написал еще один console.log с другой строкой. Оба они были напечатаны на консоли. Я хочу избежать того, что никакие другие обработчики ошибок этого наблюдаемого не выполняются. –

+0

Тогда я не уверен, что понимаю ваш вопрос. Не могли бы вы попытаться объяснить проблему немного лучше? – yarons

+0

Я создал APP, который требует входа в систему с REST API. При регистрации в приложении выдается токен jwt, который он хранит и использует для проверки всех защищенных вызовов api (с помощью AuthHttp). При получении данных я использую сообщение или получаю вызов и подписываюсь, чтобы получить его или показать ошибку (не мог подключиться или такой). Если сервер не может проверить вызов, он возвращает 401. Я хочу, чтобы связать функцию (как перехватчик), чтобы проверить каждый заверенный вызов, и если сервер вернет 401 силу выхода и пропустит все другие проверки ошибок, он может подписались, если это возможно. –