nodejs 众所周知单线程,异步io。
模型图如下:
对于for循环来说写起来非常麻烦,曾尝试过闭包,es6,asnyc。
最终选择了使用 eventproxy,具体是什么东西,大家可以百度。用起来很方便,下面上一简单个人亲测代码示例:
var eventproxy = require('eventproxy');
var ep = new eventproxy();
// list 结果集合
ep.after('get_attendance_teacher', result.length, function (list) {
res.json(list);
});
//for循环 io
for (var i = 0; i < result.length; i++) {
var queryAttendance ={};
queryAttendance = {'userId':result[i]._id,"time" : {$gt:startDate, $lt:endDate}};
Attendance.find(queryAttendance, function(err, resultAttendance) {
if (err) {
console.log("db get attendance err::", err);
return;
}
ep.emit('get_attendance_teacher', resultAttendance);
}).sort({"name":1,'time':timeSort});
}
}
双层for循环 简单demo
var arr = [{name:'Jack'}, {name:'Mike'}];
async.map(arr, function(item1, callback1) {
var arr2 = [{name:'111'}, {name:'222'}];
async.map(arr2, function(item2, callback2) {
callback2(null, item1.name+item2.name+'!!!');
}, function(err,abc) {
console.log(111111111)
console.log(abc)
// jack111 jack222
// 11111111
// mike111 mike222
callback1(null, abc);
});
}, function(err,resultAll) {
console.log(2222222)
console.log(resultAll)
// jack111 jack222 mike111 mike222
});