2017-01-08 5 views
1

私はAPIからの応答を取得し、それをNode.jsでさらに使用するために変数に保存するのには苦労しています。たぶん私は言語の仕組みがわからないかもしれません。ここでの問題は、次のとおりです。JSONレスポンスをNode.jsに変数として保存する方法は?

// Objective, get current temperature of New Delhi in celcius 

var request = require('request'); 

var url = "http://api.openweathermap.org/data/2.5/weather?id=1261481&appid=#####&units=metric"; 

request(url, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    curTemp = JSON.parse(body).main.temp; // curTemp holds the value we want 
    } 
}) 

// but I want to use it here 
console.log(curTemp); 

私は変数にopenweathermap(すなわちbody.main.temp)からのJSONレスポンスを保存したいです。それから私は現在の気温からつぶやきを作っていきます。

+0

にコーディングするための良い方法ではありません考えてみましょうか? –

+0

よくある非同期の問題です。あなたが 'curTemp'を印刷しようとすると、その変数はHTTPリクエストがまだ終了していないので、おそらく未定義です。したがって、コールバックや約束を使用するか、 'curtemp'に依存するコードを同じスコープにラップします。 –

答えて

0

リクエストは非同期です。このように非同期コードを記述する場合は、プロミスを返すAPIを使用する必要があります。 axiosasync/awaitを使用してコードを記述することができます。

+0

コードで説明できますか?私は全く新しいノードです。 –

+1

@SantoshKumarはノードのことではありません。あらかじめjavascript自体についてもっと知りたいかもしれません。 mozillaの開発者ネットワーク上で約束事と非同期的なことについて学び始めましょう。 – GottZ

+0

詐欺にはお答えください。代わりにクロージャのフラグを立てる。 –

0

in nodejsコールバックや関数については、後で呼び出す必要があります。 あなたはツイートの機能を作成し、あなたのデータを入手したときにそれを呼び出す必要があります!

var request = require('request'); 
var url = "http://api.openweathermap.org/data/2.5/weather?id=1261481& appid=#####&units=metric"; 
request(url, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    curTemp = JSON.parse(body).main.temp; // curTemp holds the value we want 
    tweet(curTemp) 
    } 
}) 

// but I want to use it here 
function tweet(data){ 
    console.log(data) 
} 

これはおそらく、あなたは、コールバックの内側にツイートすることができ、非同期

+0

笑..これは簡単でしたか? –

+0

haha​​ .. nodejでどう思うべきかを見せているところです。 – r0ck

関連する問題