반응형
'commit has been called on this transaction' 에러 해결
1. Error 메시지
단순히 Flag 값 하나를 업데이트 시켜서 저장하는 함수를 만들었는데 다음과 같이 에러가 났다. Sequelize의 비동기 transaction을 이용하여 업데이트 및 저장 하는 함수인데 뭐가 잘못된건지 찾느라 헤맸다.
반응형
2. 해결 방법
아래와 같이 두 코드를 비교해보면 id로 공고 정보를 찾아 del_status라는 flag 값을 변경 후, save()함수를 이용하여 저장해야하는데 await 을 추가해야 순차적으로 실행되므로 다음과 같이 수정했다.
//문제 코드
const deleteRecruit = async (recruit_id : number) => {
const result = await ORM.getInstance().transaction(async (t) => {
try {
const recruit = await Recruit.findOne({where: {recruit_id : recruit_id}, transaction : t});
if (!recruit)
return null;
recruit.del_status = true;
recruit.save({transaction : t});
return true;
} catch (error) {
console.log(error);
return null;
}
});
if (result != null) {
return {res : true, msg : `Delete Recruit.`};
} else {
return {res : false, msg : `Failed to delete recruit.`};
}
}
//해결 코드
const deleteRecruit = async (recruit_id : number) => {
const result = await ORM.getInstance().transaction(async (t) => {
try {
const recruit = await Recruit.findOne({where: {recruit_id : recruit_id}, transaction : t});
if (!recruit)
return null;
recruit.del_status = true;
//비동기 추가
await recruit.save({transaction : t});
return true;
} catch (error) {
console.log(error);
return null;
}
});
if (result != null) {
return {res : true, msg : `Delete Recruit.`};
} else {
return {res : false, msg : `Failed to delete recruit.`};
}
}
반응형
'개발 Study > Node' 카테고리의 다른 글
[Node.js] 공공 오픈 API 이용하기 - 지하철 노선 전체 정보 가져오기 (2) | 2022.12.16 |
---|---|
[Sequelize] ForeignKey로 Cascade delete 적용하기 (0) | 2022.12.15 |
[Node.js] 공공 오픈 API 이용하기 - 사업자 휴/폐업 실시간 조회 (5) | 2022.10.20 |
[Node.js] 비밀번호 암호화(bcrypt HASH) (0) | 2022.10.06 |
[SocketIO/WebRTC] 줌 클론 코딩(2) - WebRTC로 카메라 연결하기 (3) | 2022.08.23 |
댓글