当使用express方法res.json(items_json)返回JSON对象items_json时,我遇到了一个问题。当在下面的代码中在POSITION#1处调用express方法res.json(items_json)时,该函数完美地工作。但是,当在POSITION#2而不是#1调用res.json(items_json)时,返回的JSON对象为空:
{
"example_key_object": []
}
我想在POSITION#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 :(得分:0)
您将匿名函数作为参数传递给另一个名为request
的函数。我不确切知道这个匿名函数会发生什么,但是我猜测它是在将来响应某些浏览器事件时调用的,例如AJAX请求完成。
因此,位置#2的呼叫很可能发生在POSITION#1的呼叫之前。