>  Q&A  >  본문

데이터베이스에 데이터가 이미 존재하는 경우 데이터베이스 삽입 중에 약속 체인을 끊는 방법은 무엇입니까?

<p>멤버가 이미 데이터베이스에 존재하는지 확인한 후 몽구스를 사용하여 데이터베이스에 새 멤버 항목을 생성하고 있습니다. 구성원이 이미 존재하는 경우 응답을 반환해야 하고, 그렇지 않으면 새 구성원을 계속 삽입해야 합니다. 코드는 다음과 같습니다. </p> <pre class="brush:php;toolbar:false;">createNewMember = (req, res, next) => Member.findOne({이메일: 이메일}).exec() .then((회원) => { if(members == null ||members.length==0) { //새 멤버 객체 생성 return newMember.save() // 1 --> } 또 다른 { res.status(409).json({message: "Member 이미 존재합니다"}) // 2 --> } }) .then((결과) => { if(res.statusCode === 409) return res; // 3 --> return res.status(201).json({message: "Member has beencreated"}) // 4 --> newMember.save() 블록 }) .catch(err => { // 오류를 처리하고 오류 응답을 반환합니다. })</pre> <p>제가 원하는 것은 프로세스가 포인트 2에 도달하면 약속 체인이 끊어지지만 두 번째 블록은 여전히 ​​호출된다는 것입니다. 포인트 3은 두 번째 블록이 실행되는 것을 방지하기 위해 추가한 검사이지만 이것이 최선의 처리 방법이라고 생각하지 않습니다. 이것이 일반적인 시나리오라고 생각합니다. 더 좋은 방법이 있습니까? </p>
P粉725827686P粉725827686429일 전392

모든 응답(1)나는 대답할 것이다

  • P粉316110779

    P粉3161107792023-08-18 21:15:35

    자신의 오류를 던지고 catch 블록으로 점프하는 것 외에는 약속 체인을 깨뜨릴 수 있는 방법이 없습니다. 그러나 상황 자체가 오류가 아니라 단지 특정한 논리적 상황(멤버가 이미 존재함)일 뿐이므로 그런 오류를 사용하고 싶지는 않습니다. 다음과 같이 .then()을 다양한 관심사가 있는 케이크 레이어로 생각하는 것이 좋습니다.

    으아악

    회신하다
    0
  • 취소회신하다