而循环代码不在节点js中执行

时间:2018-05-19 07:10:51

标签: node.js

尝试在while循环中执行代码并设置标志,但是无法设置标志,它带有初始标志值。我的代码如下:

 <style name="TextLabelArbitrage">
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:fontFamily">@font/medium</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">10sp</item>
    <item name="android:paddingTop">@dimen/margin_atomic</item>
</style>

<style name="TextContentArbitrage">
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:fontFamily">@font/medium</item>
    <item name="android:gravity">center</item>
    <item name="android:maxLines">2</item>
    <item name="android:ellipsize">end</item>
    <item name="android:textSize">16sp</item>
    <item name="android:paddingBottom">@dimen/margin_atomic</item>
</style>

没有得到控件转到console.log的原因('flag value:'+ flag);而不是按顺序执行

2 个答案:

答案 0 :(得分:0)

connection.query

是异步调用,所以

console.log('flag value :  '+flag);

立即执行,并且在数据库完成之前不会执行回调(可能需要一段时间)。

如果要在查询完成后执行它,请将其与myCallback

一起使用

研究术语异步

编辑:

看起来您正在尝试重复调用查询。我不确定你到底想做什么,但我认为你所寻找的是:

var secondQuery = function(results) {
    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+'"',function (error,results_arr, fields) {
        res.end(JSON.stringify(results_arr));
        myCallback(results,results_arr);
    });
}

var database_poll_timeout = 10; // you can try setting to 0 if you want

var firstQuery = function() {
    connection.query('SELECT nlc,id,user_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) {
            secondQuery(results);
        } else {
            // this is your while loop - wait for the database to return before retrying
            setTimeout(firstQuery, database_poll_timeout);
        }
    });
}

firstQuery();

答案 1 :(得分:0)

因为节点是异步的。这就是为什么当您的查询阻止处理时,它会将您的代码推送到event-loop并执行下一个语句console.log('flag value : '+flag);