问题很简单,我在for循环中使用了一个查询,如果计数小于15,我想退出for循环,否则增加分配。但是我无法使用break语句,即使在第一次回调之后循环也会继续执行。
for (var i = 0; i < test; i++) {
var sql = "SELECT count(*) as count FROM `tb_members` WHERE `assigned`=?";
connection.query(sql, [assigned], function (err, response) {
if (response[0].count < 15) {
callback(assigned);
}
else {
++assigned;
if (i == test - 1) {
callback(0);
}
}
});
}
答案 0 :(得分:4)
编写代码的方式,所有SQL查询都将立即开始。然后,稍后,查询将开始返回结果。因此,您不能脱离for
循环,因为它已经完成并且所有SQL查询都已发送。
如果您想根据前一个查询结果决定是否发送下一个查询,那么您必须一次只发送一个查询,并且由于结果的异步性质,您不能使用{{1为此循环。
一种方法一次发送一个查询然后决定是否发送下一个查询是这样的:
for
答案 1 :(得分:0)
您应该使用异步来编写这样的循环。如果你想要一个串行行为 - 你可以考虑使用async.eachSeries,然后你可以通过调用带有错误的回调函数来停止循环。此时循环将不再执行。但是在错误处理程序中 - 忽略错误。