node.js之async的使用(series,whilst)

series函數 串行執行


async.series({

one: function(callback){
callback(null, 1);
},
two: function(callback){
callback(null, 2);
}
},function(err, results) {
console.log(results);

});


如,數據庫插入前要找出一個最大ID,,

function (cb1) {
                    var sql = "SELECT MAX(PRODUCT_ID+1) AS id FROM product;";
                    Mysql.query(sql, function (err, data) {
                        new_productid = data[0].id;
                        console.log("新的productid是: "+new_productid);
                        cb1(err,data[0]);
                    });
                },
                //產品信息插入到 t10_product
                function (cb2) {
                    var sql ="INSERT INTO `product` VALUES ('"+new_productid+"'巴拉巴拉")";
                    Mysql.query(sql, function (err, data) {
                        cb2(err,0);
                    });
                },

最後所有的results和err  會彙總到最後的辣個function,results[0]指的是cb1過來的辣個


whilst官方給的栗子

var count = 0;
async.whilst(
    function() { return count < 5; },
    function(callback) {
        count++;
        setTimeout(function() {
            callback(null, count);
        }, 1000);
    },
    function (err, n) {
        // 5 seconds have passed, n = 5
    }
);


這次實際開發中需要循環數組,遍歷數組裏面元素將其插入,,異步會壞了循環插入,其實可以把callback往外面扔,但是這樣沒法獲取mysql.query中的err信息了。


 var i = 0;

  async.whilst(
                        function() { return i < data.length; },
                        function(callback) {
                                if(){
                                    var sql="";
                                    Mysql.query(sql,function (err,data) {
                                        if(err)
                                        callback(err,0);
                                        else
                                            callback(null,0);
                                    });
                   
                                }
                                else{
                                    var sql="";
                                    Mysql.query(sql,function (err,data) {
                                        if(err)
                                            callback(err,0);
                                        else
                                            callback(null,0);
                                    });
                                }
                            i++;
                        },
                        function (err, data) {
                            cb5(err,data);
                        }
                    );

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章