mysql查询按顺序执行,而不是在节点js中同时使用异步等待

时间:2018-06-09 11:04:44

标签: mysql node.js async-await

我有一系列mysql查询。第一个查询结果用于另一个查询等等。因此,我想按顺序执行查询。代码是使用不同的方法分开的。但是由于异步行为,它同时工作。 / p>

我尝试使用dountilasync.foreverwaterfallseries的简单代码都可以在没有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代码的另一个方法。

0 个答案:

没有答案