我有一系列mysql查询。第一个查询结果用于另一个查询等等。因此,我想按顺序执行查询。代码是使用不同的方法分开的。但是由于异步行为,它同时工作。 / p>
我尝试使用dountil
,async.forever
,waterfall
和series
的简单代码都可以在没有mysql的情况下正常运行。但是当我添加mysql代码时,由于查询的异步行为,它无法正常工作。这是我的代码:
app.post('/insert', async function(req, res, next)
{
var jsondata = req.body;
var flag = 0;
var offset = 0;
async.whilst(
function test()
{
return flag == 0;
},
function chk(callback)
{
connection.query('SELECT nlc,id,user_id,coin_id FROM tbl_buy WHERE `type`="buy" AND `status`="available" AND coin_id="'+jsondata.coinid+'" AND order_type="market" order by id ASC LIMIT '+offset+',1',function (error,results, fields)
{
if(results.length > 0)
{
connection.query('SELECT tbl_buy.* from (select tbl_buy.*, (@sum := @sum + nlc) as cume_stock from tbl_buy cross join (select @sum := 0) params WHERE tbl_buy.type="sell" AND tbl_buy.status="available" AND tbl_buy.user_id!="'+results[0].user_id+'" AND tbl_buy.coin_id="'+jsondata.coinid+'" AND tbl_buy.order_type="market" order by id ) tbl_buy where cume_stock-nlc < "'+results[0].nlc+'"', async function (error,results_arr, fields)
{
if(results_arr.length > 0)
{
flag = 1;
// here both methods execute simultaneously instead of one after another
await executeOrder(results,results_arr); // this method contains mysql queries
await executeLimitOrders(jsondata.coinid); // this method contains mysql queries
callback();
}
else
{
offset++;
callback()
}
});
}
});
},
function callback(err) {
if(err)
console.log(err);
console.log('Job completed..!!');
//executeLimitOrders(jsondata.coinid);
}
);
})
请注意,按顺序执行mysql查询的一些正确方法。执行完所有函数后,我想再次调用包含mysql代码的另一个方法。