数据未添加到匿名函数内部的 JSON 对象

Data not being added to JSON object inside of anonymous function

当返回 JSON 对象 items_json 时,使用快速方法 res.json(items_json),我遇到了 运行 问题。当在下面代码中的 POSITION #1 处调用 express 方法 res.json(items_json) 时,该函数可以完美运行。然而,当 res.json(items_json) 在 POSITION #2 而不是 #1 被调用时,返回的 JSON 对象为空:

{
  "example_key_object": []
}

我想在位置 #2 中设置 res.json(items_json),这样我就可以添加一个循环。为什么 JSON 响应在 POSITION #2 时为空,但在 POSITION #1 时工作正常? (以下代码的上下文:res.json(items_json) 永远不会同时出现在 POSITION #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 :(
  }
})

您正在将一个匿名函数作为参数传递给另一个名为 request 的函数。我不知道这个匿名函数究竟发生了什么,但我猜测它会在未来某个时间被调用以响应某些浏览器事件,例如 AJAX 请求完成。

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