2017-02-17 4 views
0

Ich bin mit Knoten, Babel, Express und ich habe diesen CodeES6 Klasse Methode Rückkehr undefined

import express from 'express'; 
import httpinvoke from 'httpinvoke'; 

export class lolApi{ 

    constructor(summoner, region) { 
    this.summoner = summoner; 
    this.region = region; 
    this.methods = { 
     "currentGame": `/observer-mode/rest/consumer/getSpectatorGameInfo/${this.region}/`, 
     "matchList": `/api/lol/${this.region}/v2.2/matchlist/by-summoner/`, 
     "summonerName": `/api/lol/${this.region}/v1.4/summoner/by-name/` 
    }; 

    this.domain = `https://${this.region}.api.pvp.net`; 

    this.apiKey = "xxxxxxxxxx"; 
    } 

    getSummonerId() { 
    let url = `${this.domain}${this.methods.summonerName}${this.summoner}?api_key=${this.apiKey}`; 
    httpinvoke(url, 'GET').then((res) => { 
     this.data = JSON.parse(res.body); 
     return this.data; 
    }, (err) => { 
     console.log(err); 
    }); 
    } 
} 


export default lolApi; 

Aber wenn initialisieren die Klasse Whit

let lolapi = new lolApi(summoner, region); 
let lolData = lolapi.getSummonerId(); 
console.log(lolData); 

Die getSummonerId Methode undefined zurückgibt, jede Idee?

+0

getSummonerId Funktion in nicht Rückkehr irgendetwas zu bekommen. –

+0

Bitte schauen Sie sich an, wie Versprechen funktionieren: http://stackoverflow.com/questions/22536385/setting-a-variable-to-get-return-from-call-back-function-using-promise – nils

+0

Das ist, weil es gibt nichts zurück. es macht nur einen asynchronen Anruf. –

Antwort

3

Ihre getSummonerId-Funktion ist asynchron. Um den Rückgabewert zu erhalten, müssen Sie entweder eine callback Funktion verwenden oder eine Promise zurückgeben. Sie geben schon fast ein Versprechen ab, aber Sie haben das Schlüsselwort return vergessen.

getSummonerId() { 
    let url = `${this.domain}${this.methods.summonerName}${this.summoner}?api_key=${this.apiKey}`; 
    return httpinvoke(url, 'GET').then((res) => { 
     this.data = JSON.parse(res.body); 
     return this.data; 
    }, (err) => { 
     console.log(err); 
    }); 
    } 

und dann können Sie den Wert mit

let lolapi = new lolApi(summoner, region); 
lolapi.getSummonerId().then(lolData => console.log(lolData));