2016-06-27 11 views
-1

これは異なる質問ですが、私はこれを解決することができません。重複しないようにしてください。nodejs非同期モジュールの使い方は?

私は関数外の変数opにアクセスできません。 nodjesの非同期モジュールを使用する必要がありますか? 私は2つのconsole.logを持っています。しかし、機能ログ内でのみ動作します。

私は他の質問の回答を試みました。

var op = []; //declaring outside function 

それはその後のHTTPモジュールのに.get()関数を呼び出し、optionsそれを通過して:まだそれは

var http = require('http'); 
console.log("hi") 
var options = { 
    host: 'api.usergrid.com', 
    path: '/siddharth1/sandbox/restaurants' 
}; 
var op = []; //declaring outside function 
var req = http.get(options, function(res) { 

    // Buffer the body entirely for processing as a whole. 
    var bodyChunks = []; 
    res.on('data', function(chunk) { 
     // You can process streamed parts here... 
     bodyChunks.push(chunk); 
    }).on('end', function() { 
     var body = Buffer.concat(bodyChunks); 

     // ...and/or process the entire body here. 
     var body2 = JSON.parse(body); 

     op = body2.entities.map(function(item) { 
      return item.name; 
     }); 
     console.log(op); // only this works 
    }) 
}); 

req.on('error', function(e) { 
    console.log('ERROR: ' + e.message); 
}); 


console.log("outside function " + op); //this doesnt work 


console.log('Server listening on port 80'); 
+1

console.logが正常に動作しないのは、コールバックがサーバーから返される前に実行されているためです。ここでの本当の疑問は、コールバック以外の値を調べる必要がある理由です。非同期の使用について説明する前に、それに答えてみましょう。 –

答えて

0

のNode.jsが空配列として変数OPをインスタンスを動作していませんコールバック関数。

var req = http.get(options, function(res) { 
    ... 
}); 

コールバック関数内のコードは、HTTP GETリクエストがアプリケーションによって受信されるまで実行されないです。

ノード、その後続けて、あなたのコードの残りの部分を実行:上記の行を

console.log("outside function " + op); //this doesnt work 

が実行され、あなたはそれは空の配列になるように定義として確かに、OPは空の配列です - そして何もまだありません変更された 'op'。

次に、サーバーはアイドル状態になり、着信HTTP要求を待機します。

多くの場合、もちろんサーバーにHTTP GETリクエストを発行します。登録したコールバック関数が呼び出され、その関数内のコードが実行されます。

私があなただったら、Node.jsの基本的なチュートリアルを調べて、具体的にはノンブロッキングモデルを調べます。がんばろう。

注:Ryan Dahl's original node.js presentationは少し長めのビデオですが、少し古いですが、Node.jsの仕組みを完全に説明しています。時計を付けることを強くお勧めします。

+0

詳細を説明していただきありがとうございます。私は間違いなく見ています。残念ながら、私は明日のコードを表示しなければならず、私はこれに打たれました:(今、サルのパッチを見つけようとしています。 –

関連する問題