大家好,我现在想把一组数据插入数据库中,并且在全部插入数据后统一返回所有数据的插入结果,我听说可以用async.js来实现,但不知道如何使用,请帮一下了。下面是我的一些示例代码,现通过data.length来判读是否执行到最后一条插入命令,但这样是不能保证真正是执行到最后一条的,需要用async.js来重写,请帮忙一下。谢谢!
var data = [ {pid: 1, syncid: 'a’}, {pid: 2, syncid: 'b’}, {pid: 3, syncid: 'c’} ];
function save(table, dataObject, pcallback) { var sql = 'INSERT INTO ' + table + ' SET ?’; pool.acquire(function (error, client) { if (error) { // handle error - this is generally the err from your // factory.create function pcallback(error, null); } else { client.query(sql, dataObject, function (error, rows) { // return object back to pool client.release(); // console.log('from callback:’+ee()); pcallback(error, rows); }); } }); }
function callbackFactory(res, syncid, islast) { return function callback(err, result) { if (err) { console.log(‘err:’ + err); //throw err; } result.syncid = syncid; res.write(result.syncid + ‘,’); if (islast) { res.end(); } }; }
function sync_fee(data, res) { var i, pid, syncid, params, islast, callback; for (i = 0; i < data.length; i += 1) { pid = data[i].pid; syncid = data[i].syncid; params = {pid: pid, syncid: syncid}; islast = (i === data.length - 1); callback = callbackFactory(res, syncid, islast); save('tfee’, params, callback); } }
var opt_result = []; async.eachLimit(items, function (item, callback) { do_your_db_opt(item, function(){ opt_result.push(item_result); callback(); }); }, function (err) { review_your_result(opt_result); });
代码类似这样:
exports.sync=function(requestcode,data,res,next){
async.mapLimit(data,10,function(item,callback){
if(item.pid!=undefined || item.pid!=’’){
callback(null,item.pid); //判断传入的数据,每次返回pid值
}else{
callback(null,item.name); //判断传入的数据,每次返回name值
}
},function(err,results){
res.send(results.join()); //异步执行完data数组中的所有数据后,把每次调用的结果自动组合成数组一次性返回
});
return next();
}