Angular2- Verwechslung mit Observable Catch-Schließbereich

Frage mich, ob du ein bisschen Hilfe geben kannst. Ich scheine ein bisschen verwirrt zu sein, wenn es um die Verwendung von @ gehcatch mitObservable s.

rundsätzlich versuche ich Folgendes: Wenn meine API einen 403-Fehler zurückgibt, möchte ich einige Aktionen für mein @ ausführeTokenStore, nämlich das lokale Token löschen und den Benutzer als nicht authentifiziert markieren. Die Art und Weise, wie ich das versuche, ist möglicherweise falsch. Bitte lassen Sie mich wissen, ob es einen besseren Weg gibt, dies zu erreichen.

Ich versuche dies mit dem folgenden Code zu erreichen:

APIConnector.service.ts - ein einziger Dienst für API-Kommunikationsmethoden

import {Injectable} from 'angular2/core';
import {Http, Response, Headers, RequestOptions} from 'angular2/http';
import {Observable}     from 'rxjs/Observable';
import * as _ from 'lodash';
import {Logger}     from './logger.service';
import {TokenStore} from '../stores/token.store';

@Injectable()
export class APIConnector {

    private _apiUrl:string = 'https://api.sb.zerojargon.com/';
    private _token:string = null;

    constructor(
        private _http:Http,
        private _logger:Logger,
        private _tokenStore:TokenStore
    ) {}

    get(endpoint:String, includes:Array<string>) {
        let includeString = (!_.isUndefined(includes)) ? this._parseIncludes(includes) : '';
        let headers = this._createHeaders();
        let options = new RequestOptions({ headers: headers });
        return this._http.get(this._apiUrl + endpoint + '?include=' + includeString, options);
    }

    post(endpoint:String, formData:Object, includes:Array<string>) {
        let includeString = (!_.isUndefined(includes)) ? this._parseIncludes(includes) : '';
        let body = JSON.stringify(formData);
        let headers = this._createHeaders();
        let options = new RequestOptions({ headers: headers });
        return this._http.post(this._apiUrl + endpoint + '?include=' + includeString, body, options);
    }

    handleError(error: Response) {
        // log out the user if we get a 401 message
        if (error.json().error.http_code === 401) {
            this._tokenStore.destroy();
        }
        return Observable.throw(error.json().error || 'Server error');
    }

    private _parseIncludes(includes:Array<String>) {
        return includes.join();
    }

    private _createHeaders() {
        return new Headers({ 'Content-Type': 'application/json', 'Authorization': 'bearer ' + localStorage.getItem('token') });
    }
}

In jedem meiner Dienste, die den APIConnector verwenden, habe ich catch-Methoden auf demObservables, um das @ auszuführhandleError schließung. z.B

public createEvent(event:Object) {
    let endpoint = this._endpoint;
    return this._apiConnector.post('clients/'+this.client+'/events', event, this._defaultIncludes)
        .map(res => {
            return this._transformer.map('event', <Object[]>res.json());
        })
        .catch(this._apiConnector.handleError);
}

Dies führt jedoch zu folgendem Fehler:

EXCEPTION: TypeError: Die Eigenschaft 'destroy' von undefined @ kann nicht gelesen werd

Vermutlich liegt das daran, dass handleError ein Abschluß ist. Ich bin mir jedoch nicht sicher, wie ich am besten damit umgehen soll.

Irgendwelche Gedanken wären sehr dankbar

Antworten auf die Frage(2)

Ihre Antwort auf die Frage