在嵌套回调函数中更改变量

时间:2017-06-27 18:34:13

标签: javascript node.js express

基本上我想要完成的是从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);
});

1 个答案:

答案 0 :(得分:1)

你的handleMusicAPICalls会立即执行所有参数,包括处理程序回调(最后一个参数),但该回调不会立即被调用。

然后handleMusicAPICalls的下一行是console.log(results);

所以现在它是空的,没有人修改它。然后当事件发生时(任何事件都是如此),事件回调异步执行,然后这两行被执行

console.log(res); results.concat(res);

它仍然可以访问result,因为它已经访问了外部变量,因为它创建了一个闭包env,所以你可以修改它,并且你正在记录它。

希望它有所帮助。