>

클라이언트가 React Native 앱인Firebase에서 Cloud Firestore onCreate 트리거를 사용하고 있습니다.

onCreate 가있는 별도의 컬렉션에 글을 써서 포인트를 얻는 사용자  트리거가 연결되었습니다. 사용자는 여러 개의 단일 포인트 문서를 하나씩 만들 수 있습니다.

예 : 사용자 1은 3x100 포인트를 얻습니다. 이렇게하면 세 개의 문서가 생성되고 트리거가 세 번 트리거됩니다.

처음 실행하면 마지막 사용자 포인트 양 (예 : 500)이 100을 증가시키고 새로운 상태 = 600을 사용자 프로필에 저장합니다. 한편,이 작업이 완료되기 전에 두 번째 트리거가 트리거되고 이전 트리거가 완료되지 않은 이후 여전히 500 인 이전 상태를 읽고이를 100 씩 증가시키고 600도 저장합니다. 세 번째는 동일한 작업을 수행합니다.

최종 사용자는 500 + 100 + 100 + 100 = 800 포인트를 받아야하지만, 첫 번째 트리거가 사용자 프로파일 업데이트를 완료하기 전에 마지막 트리거가 트리거되고 그 사이의 모든 변경 사항이 덮어 쓰기 때문에 600 만 보유합니다.

이 문제를 해결하는 방법?

감사합니다.

  • 답변 # 1

    공통 문서에 대한 모든 액세스가 원자 적으로 수행되도록하려면 트랜잭션을 사용해야합니다. 이렇게하면 경쟁하는 쓰기가 서로의 업데이트를 방해하지 않게됩니다. 업데이트 할 경쟁이있는 경우 업데이트 된 데이터로 트랜잭션 처리기를 다시 시도합니다.

  • 이전 node.js - 매개 변수 whit 파일 업로드를 전달하고 노드 js Ionic 3에 가져 오는 방법
  • 다음 reactjs - React-Select 드롭 다운 값이 올바르게 작동하지 않습니다