数据未添加到匿名函数内部的 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 的调用之前。
当返回 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 的调用之前。