conn.connect(function (err) {
if (err) throw err;
var prizeCode = generatePrizeCode();// this method return a 5-digit code
var query = "SELECT * FROM user WHERE code = ? ";
var values = [[prizeCode]];
conn.query(query, [values], function (err, result) {
if (err) throw err;
// Here I want to re-execute the above query if the result is not empty
});
});
在上面的代码中,只要结果包含数据,我就希望执行query。但我不能像跟随伪码那样使用循环,
// if the result is empty, the generated code does not exist in database. So it can be used.
while(result.length != 0){
var result = conn.query("SELECT * FROM user WHERE code = abc");
}
我怎样才能做到这一点?
3条答案
按热度按时间cpjpxq1n1#
基本上,您需要使用async\await或promises(基本相同)。https://javascript.info/async-awaithttpshttp://developer.mozilla.org/en-us/docs/web/javascript/reference/global\u objects/promise
这样,只有当你得到正确的结果时,你才能回来。
gv8xihay2#
你可以添加else语句,做任何你想做的事情。
nr9pn0ug3#
您必须使用回调或promises/async函数。下面是使用回调编写的方法:
请注意,如果递归次数过多并超过最大调用堆栈,这可能会导致节点崩溃。一种解决方法是调用setimmediate或settimeout,而不是直接递归。而不是线
使用
或
使用promises和async/await样式会使这个问题得到很大的解决,可能看起来更像您习惯的样子(注意,这使用了
promise-mysql
图书馆):