2016-08-17 84 views
0

当使用express方法res.json(items_json)返回JSON对象items_json时,我遇到了问题。在下面的代码中,在位置#1调用快速方法res.json(items_json)时,该函数可以很好地工作。然而,当res.json(items_json)被称为在位置#2,而不是1号,返回的JSON对象为空:数据未被添加到匿名函数内的JSON对象

{ 
    "example_key_object": [] 
} 

我想有位置#2,所以我res.json(items_json)可以添加一个循环。为什么在位置2时JSON响应为空,但在位置1时正常工作? (上下文下面的代码:res.json(items_json)是从来没有在这两个位置#1 &#2)

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另一功能。我不知道这个匿名函数究竟发生了什么,但我猜测它在将来响应某些浏览器事件(如AJAX请求完成)时会被调用。

因此,位置#2的呼叫很可能发生在位置#1的呼叫之前。