2017-05-03 17 views
1

Axiosを使用してデータを非同期にフェッチする方法があるモジュールがあります。他のモジュールでプロミス関数を非同期関数から返す方法

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 } 

私はネットワークタブの内側に私の非同期メソッド呼び出しを参照してください

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 

A.js私部品モジュールにこのモジュールをインポートしています、しかし、応答をコンソールすることはできません、私はそれをすべて間違ってやっている?

コンソール内で未定義になると、データがないか、console.logの呼び出しが同期していることを意味します。

ネイティブなプロミスメソッドを使用して別のモジュールファイル内の別の非同期関数からデータを非同期的に取得する方法。

+1

'callAPI'は何も返しません。それは 'return axios ...'であり、 'getData(){return Services.callAPI(...)でなければなりません。 } '。 –

+1

助けを求めるときは、一貫性があり、合理的に標準的な字下げや改行を使用してコードを書式設定して、人々があなたを助けやすいようにしてください。 –

+0

angularjsで$ qを実行する – Mohammed

答えて

2

は、それが実際に何かを返すように、あなたのcallAPI方法を変更(および一切の目的果たさないthenを取り除く):それはcallAPIの値を返すように

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

があなたのgetData方法を変更します(他のすべてをあなたはその方法で役に立たないです):

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

それはそれを行う必要があります。

関連する問題