2017-08-19 14 views
0
私は関数の値を回復しようとしている

を返さないが、それは何もノードjsのリターンは何

を返しません。

var getVolumesOKCoin = function(pair){ 
    request('https://www.okcoin.com/api/v1/depth.do?symbol=' + pair, function (error, response, body) { 
    return body; 
    }); 
} 

そして、これは私が

var retObj = getVolumesOKCoin(pair); 

値を回復retObjの値は未定義であるかです。

値を回復する最も良い方法は何ですか?

ありがとうございました。

+0

、彼らは私のコードでは同じですが、私は質問 –

+0

あなたができることを修正するための[編集]あなたの質問を簡素化するために編集しました。 –

+0

@FelixKlingはチップ –

答えて

1

最初のもの:getVolumesOKCoinであり、getVolumesではない関数です。

しかし、関数を返す前にデータを受け取るのに時間がかかる非同期関数を呼び出しているので、関数は何も返しません。 See this question here about how asynchronous calls work

解決方法の1つは、関数本体をいわゆるPromiseの中にラップし、データを受信するとすぐに解決することです。

var getVolumesOKCoin = function(pair) { 
    return new Promise((resolve, reject) => { 
    request('https://www.okcoin.com/api/v1/depth.do?symbol=' + pair, (error, response, body) => { 
     resolve(body); 
    }); 
    }); 
} 

getVolumesOKCoin() 
    .then((body) => { 
    console.log(body); 
    }) 
    .catch((err) => { 
    console.error('Error!'); 
    }); 

また、requestが定義されていることを確認してください。

+0

のおかげで編集しました* "だからこそあなたは未定義になりました" *いいえ、そうではありません。名前が本当に間違っていた場合、それらは 'ReferenceError'を取得します。 –

+0

@FelixKlingあなたは正しいです。それを指摘してくれてありがとう。 – lumio

+0

@ lumio完全に動作し、未定義についてのコメントはあなたの解決策の後に行われましたあなたの悪いものではない –

0

単純なリクエストへのリターン。関数の名前については申し訳ありません

var getVolumesOKCoin = function(pair){ 
    return request('https://www.okcoin.com/api/v1/depth.do?symbol=' + pair, function (error, response, body) { 
    return body; 
    }); 
} 
+0

これはうまくいくのですか? '要求'は何を返しますか? –