2016-08-17 3 views
0

특급 메소드 res.json (items_json)을 사용하여 items_json이라는 JSON 객체를 반환 할 때 문제가 발생했습니다. 익스프레스 메소드 res.json (items_json)이 아래 코드의 POSITION # 1에서 호출되면 함수가 완벽하게 작동합니다. 그러나, res.json (items_json가) 대신 # 1의 위치 # 2에서 호출, 반환 된 JSON 객체는 비어 :익명 함수 내에서 JSON 객체에 데이터가 추가되지 않습니다.

{ 
    "example_key_object": [] 
} 

내가 POSITION # 2 그래서에서 res.json (items_json)를 갖고 싶어 루프를 추가 할 수 있습니다. POSITION # 2에서는 JSON 응답이 비어 있지만 POSITION # 1에서는 정상적으로 작동하는 이유는 무엇입니까?

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의 호출 전에 발생합니다.

관련 문제