2016-03-19 11 views
-1

Ich habe eine Frage darüber, warum meine Antwort zurückgegeben und als undefined gedruckt wird.Leere Versprechen zurück in ES6 mit einer importierten Klasse

Dies ist meine Methode in meinem main.js:

find() { 
     return this.serviceFactory 
      .createRequest() 
      .withId(333) 
      .sendAsGet().then(response => { 
       console.log(response); 
      }); 
    } 

Die obigen console.log (Antwort) ist, wo ich die Antwort nicht definiert bin immer;

und dies ist die eingeführte Klasse, die verwendet wird als this.serviceFactory

export class ServiceFactory { 
    constructor(http) { 
     this.http = http; 
     this.http.baseUrl = serviceUrlParts.baseUrl; 
     this.endpoint = ""; 
     this.id = ""; 
    } 

    createRequest() { 
     return this; 
    } 

    withId(id) { 
     this.id = id; 
     return this; 
    } 

    setEndPoint(endpoint){ 
     this.endpoint = serviceUrlParts.baseUrl + endpoint; 
    } 

    sendAsGet() { 
     return this.http.get(`${this.endpoint}/${this.id}`) 
      .then(response => { 
       this.parseJSONContent(response); 
      }).catch(error => { 
       console.log(error); 
      }); 
    } 

    parseJSONContent(response) { 
     console.dir(JSON.parse(response.content)); 
     return JSON.parse(response.content); 
    } 
} 

Die console.dir (JSON.parse (response.content)) in der parseJSONContent Methode wird das richtige Objekt auszudrucken, das ist von der API zurückgegeben. Irgendwo, der zum Anruf zurückgeht, ist es verloren. Ein Einblick in das, was falsch läuft, wäre sehr willkommen!

+1

Weil Sie * bis * Rückkehr 'undefined' (oder don alles zurückgeben von all diesen Rückrufen. – Bergi

Antwort

2

Hier können Sie nicht zurück, den Wert:

.then(response => { 
    this.parseJSONContent(response); 
}) 

Änderung es zu:

.then(response => { 
    return this.parseJSONContent(response); 
}) 

oder

.then(response => this.parseJSONContent(response)) 
+0

Ahhh danke Tamas, das macht vollkommen Sinn lol. Ich bin mit der Option "oder" gegangen, die du gepostet hast, aber alle haben beide richtig funktioniert. Wird so schnell wie möglich als Antwort markieren. – Shawn