2017-02-17 4 views
0

Я использую узел, Бабель, Экспресс и у меня есть этот кодES6 Класс возврата метод не определен

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; 

Но, когда инициализировать класс йота

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

Метод getSummonerId возвращает неопределенное значение, любой идея?

+0

функцию getSummonerId в ничего не возвращает. –

+0

Пожалуйста, посмотрите, как работают обещания: http://stackoverflow.com/questions/22536385/setting-a-variable-to-get-return-from-call-back-function-using-promise – nils

+0

Это потому, что оно ничего не возвращает. он просто выполняет асинхронный вызов. –

ответ

3

Ваша функция getSummonerId асинхронна. Чтобы получить возвращаемое значение, вы должны использовать функцию callback или вернуть Promise. Вы уже почти обещаете, но вы забыли ключевое слово return.

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); 
    }); 
    } 

, а затем вы можете получить значение с помощью

let lolapi = new lolApi(summoner, region); 
lolapi.getSummonerId().then(lolData => console.log(lolData)); 
Смежные вопросы