-1
에 대한 2 개의 시퀀셜 쿼리 실행 아래 코드는 작동하지만 나는 그것이 끔찍하고 유지 보수가 불가능하다는 것을 알고 있습니다.노드 비동기 - 객체 배열
날짜 배열이 있는데 데이터베이스에 다음 번호를 생성하는 첫 번째 쿼리와 데이터베이스에 새 이벤트를 삽입하는 두 번째 쿼리를 실행해야합니다.
더 나은 코드로 어떻게이 루틴을 수행 할 수 있습니까? 비동기/대기 (es7) 또는 약속 또는 콜백을 사용할 수 있다고 생각합니다.
const async = require('async')
function Reschedule(){
this.createEvent = function(req, res, next){
req.DesiredDate = req.DesiredDate.filter(e=>e.Available)
// req.DesiredDate = [{},{},{}.....] objects with date property desired
async.forEachSeries((req.DesiredDate), function (item, callback){
conn.acquire(function(err,con){
con.query('SELECT EventID, EventCode FROM event WHERE YEAR(StartEvent) = YEAR(?) order by eventId desc limit 1', [item.dateStart], function(err, result) {
con.release();
if(err){
console.log(err);
res.render('error', { error: err });
}else{
//Get new Number of EVENT
let eventCode = result.length === 0 ? parseInt(moment(item.dateStart).year() + '0001') : result[0].EventCode + 1
console.log('proximo codigo: ' + eventCode)
let newEvent = {
Type: 'I',
EventCode: eventCode,
StartEvent: item.dateStart,
EndEvent: item.dateEnd,
Room_ID: req.findEventByCode.RoomID,
Name: req.findEventByCode.title
}
// after get new number in query above, then create new event
conn.acquire(function(err,con){
con.query('INSERT INTO Event SET ?', [newEvent], function(err, result) {
con.release()
if(err) {
console.log(err)
res.render('error', { error: err })
} else {
console.log('created new event ' + eventCode);
callback()
}
})
})
}
})
})
}, function(err) {
next()
})
}
}
module.exports = new Reschedule()