2016-08-17 17 views
0

expressメソッドres.json(items_json)を使用してitems_jsonというJSONオブジェクトを返すときに問題が発生しました。エクスプレスメソッドres.json(items_json)がPOSITION#1の下のコードで呼び出されると、関数は完全に機能します。しかし、res.json(items_json)はJSONオブジェクトが返され、代わりに#1の位置#2で呼び出さ空になっているとき:匿名関数内のJSONオブジェクトにデータが追加されない

{ 
    "example_key_object": [] 
} 

私は位置#2にres.json(items_json)を持つようにしたいので、私ループを追加できます。 POSITION#2ではJSON応答が空ののはなぜですか?しかしPOSITION#1ではJSON応答はうまくいかないのですか?

app.get('/example_apiurl', function(req, res) { 

    var items_json = {} 
    var key_object = 'example_key_object'; 
    items_json[example_key_object] = []; 

    var item_str; 
    var data;  
    var url = "example.com"; 

    request(url, function(error, response, html){ 
     if(!error){ 
      var $ = cheerio.load(html); 

      /* 
      some irreverent logic to get var items_clean_st 
      */ 

      item_str = items_clean_st.substring(x,y); 
      data = { 
      locationID: 2, 
      item: item_str 
      }; 
      items_json[key_object].push(data); 
      res.json(items_json) //POSITION #1 //returns correctly! 
     } 
    }) 
    res.json(items_json) //POSITION #2 //empty :(
    } 
}) 

答えて

0

あなたはrequestと呼ばれる別の関数へのパラメータとして無名関数を渡しています(コンテキストは、以下のコードをres.json(items_json)の両方の位置#1 &#2になることはありません)。私はこの無名関数で何が起こるのか正確にはわかりませんが、AJAXリクエストの完了など、いくつかのブラウザイベントに応答して将来呼び出されると推測しています。

したがって、POSITION#2のコールは、POSITION#1のコールの前に発生する可能性があります。

関連する問題