我有一个名为foo的函数,该函数使用mysql模块:https://github.com/mysqljs/mysql
fooz = [{query1:'',query2:'',query3:''},{query1:'',query2:'',query3:''},{query1:'',query2:'',query3:''},{query1:'',query2:'',query3:''}]
function foo (query1,query2,query3){
var connection = mysql.createConnection(dbconfig);
connection.query(query, function (error, results, fields) {
connection.query(query2, function (error, results, fields) {
connection.query(query3, function (error, results, fields) {
connection.end()
})
})
})
然后我有一个for循环,它将多次调用此函数。
for (i=0;i<fooz.length;i++){foo(fooz[i].query1,fooz[i].query2,fooz[i].query3)}
发生的事情是foo被多次调用,但仅执行其中一个功能,然后停止。我该怎么做才能确保foo函数执行一次以上?谢谢!
答案 0 :(得分:0)
您可以递归调用for循环。只要确保有退出条件
fooz = [{query1:'',query2:'',query3:''},{query1:'',query2:'',query3:''},{query1:'',query2:'',query3:''},{query1:'',query2:'',query3:''}];
foo(0);
function foo(index) {
if (index >= fooz.length) {
return;
}
var connection = mysql.createConnection(dbconfig);
connection.query(fooz[index].query1, function (error, results, fields) {
connection.query(fooz[index].query2, function (error, results, fields) {
connection.query(fooz[index].query3, function (error, results, fields) {
connection.end();
foo(index + 1);
})
})
});
}
关于这一点的好处是您的查询列表也是非阻塞的。 您可能还需要考虑在调用foo之前打开连接,并在完成迭代后将其关闭。
答案 1 :(得分:0)
如果您这样制作foo
function foo (query1,query2,query3){
var connection = mysql.createConnection(dbconfig);
function runQuery(query) {
return new Promise((resolve, reject) => {
connection.query(query, function (error, results, fields) {
if (error) reject(error);
resolve(results);
})
})
}
return runQuery(query1).then(results => {
return runQuery(query2);
}).then(results => {
return runQuery(query3);
})
}