首页 > 解决方案 > 如何在for循环内多次调用具有多个嵌套mysql查询的函数?

问题描述

我有一个名为 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 函数多次执行?谢谢!

标签: javascriptnode.js

解决方案


你可以递归地调用你的 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 之前打开连接,并在完成迭代时关闭它。


推荐阅读