【问题标题】:After having pushed elements in array, it is empty在数组中推入元素后,它是空的
【发布时间】:2017-08-17 09:44:59
【问题描述】:

我从 MySQL 查询中获取数据,然后将元素推送到数组中。但是,一旦我离开查询,数组就是空的。我猜这是因为数组中的元素只是引用。但是如何将元素保留在数组中?

var timeblocked = [];
var timeunblocked = [];
connection.query("SELECT user_relationships.*, block_intervals.* FROM user_relationships INNER JOIN block_intervals ON user_relationships.id = block_intervals.relationfk WHERE (user1 = '"+currentUserID+"' AND user2 = '"+user2_in_blockedRelationship+"' AND timeunblocked IS NOT NULL)", function(error, resultsForBlock){
  for (var i = 0; i<resultsForBlock.length; i++) {
    timeblocked.push(resultsForBlock[i].timeblocked);
	  timeunblocked.push(resultsForBlock[i].timeunblocked);
  }
console.log("1. timeblocked: ", timeblocked, "timeunblocked: ", timeunblocked); // shows all of the elements in the array
});
console.log("2. timeblocked: ", timeblocked, "timeunblocked: ", timeunblocked); //This shows an empty array

为什么第二个console.log() 记录数组?

【问题讨论】:

标签: javascript mysql arrays


【解决方案1】:

这是异步行为。完成回调执行后,您应该等待执行这些东西。

您的第二个控制台日志在对 db 的调用完成之前执行。

最好的方法是仅在完成 ​​sql 调用后使用数组。

connection.query("SELECT user_relationships.*, block_intervals.* FROM user_relationships INNER JOIN block_intervals ON user_relationships.id = block_intervals.relationfk WHERE (user1 = '"+currentUserID+"' AND user2 = '"+user2_in_blockedRelationship+"' AND timeunblocked IS NOT NULL)", function(error, resultsForBlock){
  for (var i = 0; i<resultsForBlock.length; i++) {
    timeblocked.push(resultsForBlock[i].timeblocked);
      timeunblocked.push(resultsForBlock[i].timeunblocked);
  }
console.log("1. timeblocked: ", timeblocked, "timeunblocked: ", timeunblocked); // shows all of the elements in the array



// TODO -- remaining all code that uses the array.

});

如果您不知道,最好使用promises

【讨论】:

  • 我想过这样做,但由于我的其余代码很复杂,如果我可以让它工作,而不是在查询中添加代码会容易得多。
  • @jonasPW Promises are your friends :)
  • @SURESH 你将如何使用 Promise 进行我的查询?
猜你喜欢
  • 2021-11-15
  • 2018-08-28
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多