最近写数据库批量插入数据的时候遇到了一个异步编程之痛的问题,就是数据库操作都是异步回调的,那么就没有办法用for循环来操作了,思考了一下,看来只能利用迭代循环了,举例分享一下,希望高手提提意见,小白小心一下。
exports.saveBatch = function saveBatch(basicInfos, callback) {
executeFunc(basicInfos, 0, [], callback);
}
function executeFunc(basicInfos, count, errs, callback) {//errs是个错误信息收集器,最后统一返回错误信息集合
if (count == basicInfos.length) {
callback(errs);
} else {
basicInfos[count].save(function (err) {
count++;
err && errs.push(err.message);
executeFunc(basicInfos, count, errs, callback);
});
}
}
14 回复
使用外围标记,在for循环中使用代码段标记判断即可,形如:
var flag = 0;
var datas = [.........................];
for(var i =0; i < datas.length; i++){
save(datas[i],function(){
if(i == ++flag){
callback();
}
});
}