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

来源:互联网 发布:红帽群排名优化软件 编辑:程序博客网 时间:2024/06/08 06:43

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);
                        }
                    );

原创粉丝点击