如何使用async.js来实现循环插入数据到数据库并统一汇总操作结果后返回
发布于 11 年前 作者 jbasttdi 5860 次浏览 最后一次编辑是 8 年前

大家好,我现在想把一组数据插入数据库中,并且在全部插入数据后统一返回所有数据的插入结果,我听说可以用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); } }

3 回复

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

谢谢,现在可以了,我用map来实现,map不需要自定义一个数据来接收返回值,在他的回调函数中会把每次的返回值都存起来,一次性返回。

代码类似这样: 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(); }

回到顶部