在node js中的for循环中一个接一个地执行mysql查询[关闭]

mlmc2os5  于 11个月前  发布在  Node.js
关注(0)|答案(2)|浏览(84)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

三年前关闭。
这篇文章是编辑并提交审查20小时前.
Improve this question
我试图在for循环中一个接一个地执行Mysql查询。我试图实现的是,每次迭代都将使用前一次迭代查询生成的输出,但由于JavaScript中I/O的异步性质,所有查询都试图同时执行,并且由于前一次查询的结果没有被使用而导致错误。
我的synatx类似于这个:

var iterationCount = 10;
var query = "some sql query";
for(i=0;i<iterationCount;i++) {
    result = executeSQLQuery(query);
    // resultToQuery perform some operation on result and return a query
    query = createQueryFromresult(result);
}

function executeSQLQuery(query) {
  // logic to execute the query
}

function createQueryFromresult(result) {
  // logic to create query by fetching some fields from result
}

字符串

1yjd4xko

1yjd4xko1#

最简单的处理方法是使用await/ await。注意,await语法允许您以易于阅读的形式顺序使用异步方法代码。还要注意,您可以等待返回promise的函数,也可以等待await/await/await。它们实际上是相同的东西,只是语法略有不同。
就像这样。

/* promisified query method, suitable for await */
 function doQuery(conn,sql,args) {
     return new Promise (function( resolve, reject ) {
        conn.query(sql, args, function (error, results, fields) {
            if (error) return reject(error)
            resolve({results, fields})
        }) 
     })
 }

 /* your loop operation */
 async function whatever ( args ) {
      for (whatever conditions) {
         let queryOutput = await doQuery (conn, sql, [arg, arg])
         let firstColumn = queryOutput.results['first_column']
      }
      return resultValue
 }

 /* call your async function */
 whatever(args)
 .next (function (resultValue) {  whatever you need } )
 .catch (console.error)

字符串

8dtrkrch

8dtrkrch2#

你可以像这样使用forEach循环

array.forEach(async item=>{
  await conn.query(sql, args)
  //write query with await
}

字符串

相关问题