javascript - 如何在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 函数多次执行?谢谢!
解决方案
你可以递归地调用你的 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 之前打开连接,并在完成迭代时关闭它。
推荐阅读
- docker - 由于 go 命令失败,无法创建映像
- javascript - 通过 https 从 ajax 访问烧瓶
- javascript - BxSlider IE 问题
- javascript - NuxtJs 从 jquery 更改的输入中获取值
- python - Python Django ValueError 无效的 int() 文字,基数为 10:'telba.de_001'
- jestjs - 使用 Jest 抛出错误的 StencilJS 单元测试
- java - 如何拦截自己创建实例的JdbcTemplate
- uml - 这两个类有什么关系?
- mongodb - 如何在mongodb中将字符串转换为日期?
- purescript - purescript 中的模式匹配