인프런 커뮤니티 질문&답변
시퀄라이즈 여러 쿼리 보내기, Promise async await 개념
해결된 질문
작성
·
220
0
안녕하세요. 항상 강의 보면서 도움 많이 받고 있습니다.
프론트에서 체크박스로 제품을 열람가능한 유저를 선택해서
DB에서 기존 데이터를 삭제하고 체크한 유저를 다시 추가해주는 식으로
제품열람가능 유저를 업데이트 하려고 하는데요
제품모델과 유저 모델은
이런식입니다.
프론트는 Form과 Checkbox로 단일 ItemId와 UserId 배열을 보내주고
백에서 req.body로 받는 데이터는
{ id: '1', values: { customerIds: [ 'tttt', 'ttt3' ] } }
이런식으로 받습니다.
유저 tttt가 이미 등록된 상태에서
유저 tttt, ttt3 를 선택해서 등록하면
DB에는 ttt3만 등록된 결과가 나옵니다...
실제 INSERT 문도 하나만 실행되네요.
항상 이런건 아니고 될때도 있습니다.
비동기 부분이 꼬여서 그런것같은데 제가 promise 개념이 약해서
어떤식으로 해결할 수 있을지 궁금합니다.
Promise, async, await 부분은 제로초님 강의 꼭 다시 보겠습니다.
백엔드 로그는 이러합니다.
고객등록 req.body { id: '1', values: { customerIds: [ 'tttt', 'ttt3' ] } }
tester1
Executing (default): SELECT `id`, `codeName`, `name`, `packageName`, `unit`, `msrp`, `supplyPrice`, `imgSrc`, `createdAt`, `updatedAt`, `UserId` FROM `Items` AS `Item` WHERE `Item`.`id` = '1';
Executing (default): SELECT `User`.`id`, `User`.`password`, `User`.`company`, `User`.`name`, `User`.`phone`, `User`.`email`, `User`.`role`, `User`.`createdAt`, `User`.`updatedAt`, `ItemUsers`.`createdAt` AS `ItemUsers.createdAt`, `ItemUsers`.`updatedAt` AS `ItemUsers.updatedAt`, `ItemUsers`.`ItemId` AS `ItemUsers.ItemId`, `ItemUsers`.`UserId` AS `ItemUsers.UserId` FROM `Users` AS `User` INNER JOIN `ItemUsers` AS `ItemUsers` ON `User`.`id` = `ItemUsers`.`UserId` AND `ItemUsers`.`ItemId` = 1;
유저 제거 시도 tttt
유저 추가 시도 tttt
유저 추가 시도 ttt3
Executing (default): DELETE FROM `ItemUsers` WHERE `ItemId` = 1 AND `UserId` IN ('tttt')
Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tttt';
Executing (default): SELECT `createdAt`, `updatedAt`, `ItemId`, `UserId` FROM `ItemUsers` AS `ItemUsers` WHERE `ItemUsers`.`ItemId` = 1 AND `ItemUsers`.`UserId` IN ('tttt');
POST /item/add-customer/ 200 9.485 ms - 236
Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'ttt3';
Executing (default): SELECT `createdAt`, `updatedAt`, `ItemId`, `UserId` FROM `ItemUsers` AS `ItemUsers` WHERE `ItemUsers`.`ItemId` = 1 AND `ItemUsers`.`UserId` IN ('ttt3');
Executing (default): INSERT INTO `ItemUsers` (`createdAt`,`updatedAt`,`ItemId`,`UserId`) VALUES ('2021-12-22 05:56:16','2021-12-22
05:56:16',1,'ttt3');
Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tester1';
Executing (default): SELECT `User`.`id`, `User`.`company`, `User`.`name`, `User`.`phone`, `User`.`email`, `User`.`role`, `User`.`createdAt`, `User`.`updatedAt`, `Customers`.`id` AS `Customers.id`, `Customers`.`company` AS `Customers.company`, `Customers`.`name`
AS `Customers.name`, `Customers->UsersRelation`.`createdAt` AS `Customers.UsersRelation.createdAt`, `Customers->UsersRelation`.`updatedAt` AS `Customers.UsersRelation.updatedAt`, `Customers->UsersRelation`.`customerId` AS `Customers.UsersRelation.customerId`, `Customers->UsersRelation`.`providerId` AS `Customers.UsersRelation.providerId` FROM `Users` AS `User` LEFT OUTER JOIN ( `UsersRelation` AS `Customers->UsersRelation` INNER JOIN `Users` AS `Customers` ON `Customers`.`id` = `Customers->UsersRelation`.`customerId`)
ON `User`.`id` = `Customers->UsersRelation`.`providerId` WHERE `User`.`id` = 'tester1';
Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tester1'
답변 1
1





해당 id를 가진 유저가 있는지 확인하기 위해서 반복문으로 한거긴 한데
배열로 입력이 가능한지는 몰랐습니다. ㅠ 감사합니다.
addItemViewUsers부분만 반복문에서 빼고 배열넣어주는식으로 바꿨는데 동일하게 작동이 잘 안되서
삭제부분까지
이렇게 바꾸니 작동이 잘 되네요. 정말 감사드립니다! 😍😍
유저 있는지 검사는
이런식으로 반복문으로 남겨도 될까요?
반복문인 경우 왜 작동이 안되는지도 궁금합니다. (비동기때문인지 시퀄라이즈 특성인지 제가 그냥 잘 못짠건지 ㅠ)