2017-05-03 3 views
1

Ich habe ein Modul mit meiner Methode, Daten asynchron mit Axios abzurufen.Wie bekomme ich Promise Rückgabeobjekt von asynchronen Funktion in einem anderen Modul

services.js

import axios from 'axios'; 
class Services { 

static callAPI(params) { 
    var headers = { 
     'Accept': 'application/json' 
    } 
    axios({ 
     method:'get', 
     url: params.url, 
     headers: headers 
    }) 
    .then(function(response) { 
     return response; 
    }); 
}}export { Services } 

ich dieses Modul in meine Komponentenmodul am Import A.js

A.js

class Modules extends Component { 
componentDidMount(){ 
    this.getData().then(function(response){ 
     console.log(response); 
    }); 
} 

getData(){ 
    var prom = new Promise(function (resolve, reject) { 
     resolve(Services.callAPI({url: Paths.localAPIPath() + '/module',accept: 'application/json'})); 
    }); 
    return prom; 
} 

render() { 
    return (
     <p></p> 
    ) 
}}export default Modules 

ich meine Asynchrone Methodenaufruf innerhalb des Netzwerks siehe Registerkarte , kann aber die Antwort nicht trösten, mache ich alles falsch oder was?

Nicht definiert in der Konsole, dh entweder Daten fehlen oder der Aufruf von console.log ist synchron.

Also, um alles zusammenzufassen Wie asynchron Daten von einer anderen asynchronen Funktion innerhalb einer anderen Moduldatei mit nativen Verheißungsmethode erhalten.

+1

'callAPI' gibt nichts zurück. Es sollte 'return axios ...' sein und einfach 'getData() {return Services.callAPI (...); } '. –

+1

Wenn Sie um Hilfe bitten, sollten Sie sich die Zeit nehmen, den Code mit konsistenten, einigermaßen standardmäßigen Einrückungen und Zeilenumbrüchen zu formatieren, damit die Benutzer Ihnen leichter helfen können. –

+0

gehen durch $ q in angularjs – Mohammed

Antwort

2

ändern callAPI Methode so, dass es tatsächlich etwas (und loszuwerden der then, die keinen Zweck dient) liefert:

static callAPI(params) { 
    var headers = { 
     'Accept': 'application/json' 
    } 
    return axios({ 
     method:'get', 
     url: params.url, 
     headers: headers 
    }) 
} 

ändern getData Methode so, dass sie den Wert der callAPI (alles andere zurück Sie haben in dieser Methode ist nutzlos):

getData(){ 
    return Services.callAPI({ 
     url: Paths.localAPIPath() + '/module', 
     accept: 'application/json' 
    }); 
} 

Das sollte es tun.

Verwandte Themen