基本上我想要完成的是从handleMusicAPICalls函数获取结果并将其推入结果数组,该结果数组在get路由的回调函数中声明。目前,当我运行它时,第一个输出是“[]”(来自第二个console.log),然后在它下面是我想要看到的实际数据(第一个console.log)。有什么建议吗?
router.get("/activities", middleware.isLoggedIn, function(req, res) {
var destination = req.query.destination;
var startDate = req.query.daterange.replace(/\s+/g, '').split("to")[0];
var endDate = req.query.daterange.replace(/\s+/g, '').split("to")[1];
var activities = req.query.activities;
var results = [];
helper.handleMusicAPICalls(destination, startDate, endDate, activities, function(res) {
console.log(res);
results.concat(res);
});
console.log(results);
});
答案 0 :(得分:1)
你的handleMusicAPICalls
会立即执行所有参数,包括处理程序回调(最后一个参数),但该回调不会立即被调用。
然后handleMusicAPICalls
的下一行是console.log(results);
所以现在它是空的,没有人修改它。然后当事件发生时(任何事件都是如此),事件回调异步执行,然后这两行被执行
console.log(res);
results.concat(res);
它仍然可以访问result
,因为它已经访问了外部变量,因为它创建了一个闭包env,所以你可以修改它,并且你正在记录它。
希望它有所帮助。