2017-04-20 1 views
1

Wie im Titel gesagt, passiert nichts, wenn ich meine beobachtbare abonnieren. Es gibt keinen Fehler in der Konsole oder während des Builds. Hier ist mein Code:Angular 2 Http nicht auslösen

Mein Service

getBlueCollars(): Observable<BlueCollar[]> { 
return this.http.get(this.defaultAPIURL + 'bluecollar?limit=25').map(
    (res: Response) => { 
    return res.json(); 
    }); 
} 

Meine Komponente

ngOnInit() { 
    this.planifRequestService.getBlueCollars().subscribe(
     data => { 
     this.blueCollars = data; 
     console.log('Inner Blue Collars', this.blueCollars); 
     }, 
     err => console.log(err) 
    ); 
    console.log('Value BlueCollars : ', this.blueCollars); 
} 

So ist der zweite console.log auslöst mit "Wert BlueCollars: Nicht definiert", und das Protokoll in meinem Abo wird nie gezeigt. Außerdem kann ich die auf der Registerkarte "Internet" von Chrome gesendete Anfrage nicht sehen.

Also alles mit dem folgenden Code habe ich versucht, zu vereinfachen:

let response: any; 
this.http.get('myUrl').subscribe(data => response = data); 
console.log('TestRep: ', response); 

Das gleiche Problem hier, kein Fehler, Antwort ist nicht definiert. Es scheint, dass der Abonnent das Observable nicht auslöst. (Die URL korrekt ist, wird es auf meine Prahlerei oder mit Postbote arbeitet.)

Ich bin auf Angular 2.4.9

bearbeiten

Also versuchte ich/Vergangenheit den Code zu kopieren von meine Anfrage zu einem brandneuen Projekt, alles funktioniert gut. Die Anfrage wird ausgelöst und ich kann die JSON-Antwort korrekt abrufen. Es gibt also vielleicht etwas in der Konfiguration meines Projekts, das verbietet, dass die Anfrage korrekt ausgelöst wird.

+1

Was die URL Ihrer Angular App ist es, was die URL des Backend Sie anrufen? Haben sie denselben Host und denselben Port oder nicht? –

+0

können wir den Rest des Komponentencodes sehen? oder ein Plunkr? – danimal

+0

die Syntax des Abonnierens ist soweit ich sehen kann richtig - subscribe kann ein zwei oder drei Funktionen als Argumente, und das OP hat zwei, was in Ordnung ist. – danimal

Antwort

2

Ok gerade gefunden, was los war. Ich verwende ein gefälschtes Backend, um meine Login-Verbindungen auszuprobieren, die nur die angegebene URL abfangen sollen. Aber für den Lebensunterhalt nahm es alle Anfragen auf, so dass alles erklärt wurde. Danke für Ihre Hilfe.

+0

hi sa hagin mir zu gleich problem endlich habe ich jetzt das problem cheers behoben – afeef

0

Der Grund für die console.log außerhalb des abonnieren Anrufs nicht definiert ist, weil die subscribe/http Aufruf asynchron geschieht und so in der Tat die Reihenfolge (in der Zeit!) Der Code ausgeführt wird:

1) die beobachtbar (und wartet dann auf eine Antwort gezeichneten) 2) die äußere Konsolprotokoll läuft mit blueCollars undefinierten 3), wenn die Antwort (oder Fehler) zurück von der HTTP-Anforderung (möglicherweise nach mehreren Sekunden) kommt, nur dann wird die innere Zuordnung von this.blueCollar = data passieren (und die innere Konsole log), oder ein Fehler wird protokolliert

Ansonsten sieht der Subscribe-Code gut aus ...!

+0

Nun, ich verstehe, aber ich sollte zumindest in der Lage sein, die Anfrage in der Chrome-Netzwerk-Registerkarte zu sehen, was nicht der Fall ist. Außerdem sollte ich die 'Inner Blue Collars' in der Konsole sehen und das ist nicht der Fall. –

+0

Entschuldigung, das eigentliche Problem ist, dass der subscribe Callback offensichtlich nicht das Protokoll anzeigt, das es sollte. Der asynchrone Teil ist korrekt, erklärt aber nicht das Hauptproblem. – Sebas

+0

Ja, ich weiß, aber ich kann keine Probleme mit dem Rückruf zu sehen, wie es eingerichtet ist – danimal

1

Versuchen Sie, einen catch-Block zu Ihrem Service Code hinzufügen:

getBlueCollars(): Observable<BlueCollar[]> { 
    return this.http.get(this.defaultAPIURL + 'bluecollar?limit=25') 
    .map(
    (res: Response) => { 
     return res.json(); 
    }) 
    .catch(err => Observable.throw(err)) 
} 

Vergessen Sie nicht zu

import 'rxjs/add/observable/throw'; 
import 'rxjs/add/operator/catch';` 

ich das vorstellen, wird in dem Fehler führen, dass Sie eine Idee gebe, wo Ihre Code läuft falsch.

+0

Thx für Ihre Antwort. Ich habe versucht, den Fang mit den guten Importen zu ergänzen, aber nichts passiert. Es werden keine Fehler angezeigt. –