我正在尝试用nodejs编写两个mysql查询。第二个查询使用第一个查询的结果。问题是第二个查询在第一个查询尚未完成时开始执行。 我有什么想法可以解决这个问题? 谢谢 !以下是代码:
let userId;
let username;
let password;
let token;
connection.query("SELECT user_id from proxy_pairs WHERE id = " + connection.escape(proxyPairId), function(err, rows, fields) {
if (err) throw err
userId = rows[0].user_id;
})
connection.query("SELECT username, password, token from accounts WHERE id = " + connection.escape(userId), function(err, rows, fields) {
if (err) throw err
username = rows[0].username;
password = rows[0].password;
token = rows[0].token;
})
答案 0 :(得分:0)
在回调中进行第二次调用:
connection.query("SELECT user_id from proxy_pairs WHERE id = " + connection.escape(proxyPairId), function(err, rows, fields) {
if (err) throw err
userId = rows[0].user_id;
connection.query("SELECT username, password, token from accounts WHERE id = " + connection.escape(userId), function(err, rows, fields) {
if (err) throw err
username = rows[0].username;
password = rows[0].password;
token = rows[0].token;
})
})
根据您使用的节点版本而不是回调,我建议使用promises或async/await来构建查询。
答案 1 :(得分:0)
这不起作用,因为查询将异步执行。要完成这项工作,您有3个选择。
嵌套通话。
使用承诺。
使用async / await。
最简单的方法是嵌套调用。
这适用于嵌套调用。
let userId;
let username;
let password;
let token;
connection.query("SELECT user_id from proxy_pairs WHERE id = " + connection.escape(proxyPairId), function(err, rows, fields) {
if (err) throw err
userId = rows[0].user_id;
connection.query("SELECT username, password, token from accounts WHERE id = " + connection.escape(userId), function(err, rows, fields) {
if (err) throw err
username = rows[0].username;
password = rows[0].password;
token = rows[0].token;
})
})
对于不同的解决方案,您应该参考promises和async / await。我希望承诺或异步/等待这种情况,但你可以自由选择。