nodejs 비동기식 구조안에서 루프형태의 mysql update 처리
조회수 1639회
php개발만 하다 nodejs 에 입문한 초보입니다.
우선 구현하고자 하는 구조를 말씀드리면
- mysql select로 limit 10~50개 정도의 레코드를 추출
- 루프를 돌려 idx와 url을 추출
- request모듈을 사용하여 자사 다른서버에 접근 정보를 가져옴
- idx 기준으로 업데이트
위와 같은 구조를 비동기식으로 만들어보고 싶어
async.waterfall([
function(cb) {
connection.query("SELECT idx, url FROM table LIMIT 5", function(err, rows, fields) {
if(err) { throw err; }
if(rows.length > 0) {
cb(null, rows);
} else {
cb(err);
}
});
},
function(data, cb) {
async.parallel([
function(pcb) {
for(var i=0;i<data.length;i++) {
var idx = data[i].idx;
var url = data[i].link;
request(url, function(error, response, html){
// { 중간생략 }
var upQuery = "UPDATE table SET text = 'a' WHERE idx = '"+idx+"' ";
connection.query(upQuery);
});
pcb(null, "ok");
}
}
], function(err, result) {
connection.end();
cb(err, result);
});
}
], function(err, result) {
if( err ) {
console.log( err );
}
});
문제는 for문 안에서는 동기식으로 업데이트가 되는거 같아 connection.end()로 mysql connection이 종료되버린후에 update가 진행되는것 같습니다.
select에서 가져온 레코드수를 받아 처리는 동기식으로 하되 종료되는 시점을 판단하여 connection.end를 처리하고 싶습니다.
도움 부탁드립니다. (_ _)
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력