2017-03-16 2 views
5

저는 firebase-queue 번 작업자를 클라우드 기능으로 이전하기 위해 Firebase 용 클라우드 기능을 시험 중입니다. 주어진 ref에서 새로운 노드를 만들 때마다 마지막으로 업데이트 된 타임 스탬프를 추가하는 간단한 함수를 추가했습니다. 이 함수는 다음과 같이 보입니다 :Firebase 용 클라우드 기능이 여러 번 호출되었습니다.

이 클라우드 기능을 배치하고 내 응용 프로그램에서 하나의 노드 만 추가했습니다. 나는 Firebase Functions 대시 보드로 가서 함수가 169 번 호출되었고 왜 그런지 알지 못합니다. 로그를 보면 과거의 모든 노드에 기능을 추가하는 것과 같은 로그가 표시됩니다.

onWritechild_added과 비슷하게 동작하고 기존 엔티티의 모든 기능을 실행합니까?

이 작업을 변경하고 배포 할 때마다이 작업을 반복해야합니까?

새로 추가 된 노드에 대해 한 번만 실행되기를 기대했습니다.

+0

아래의 답변을 확인하십시오. –

답변

5

데이터베이스 쓰기를 처리하는 함수를 작성할 때 흔히 저지르는 실수입니다. 특정 위치에서 초기 쓰기 이벤트를 처리하면 해당 위치로 두 번째 다시 쓰기, 두 번째 쓰기는 함수를 다시 실행하는 또 다른 이벤트를 트리거하는 등의 작업을 수행하며 무한 루프가됩니다.

함수에 두 번째 쓰기 이벤트가 데이터베이스에 다시 쓰지 않아야하는지 결정하는 논리가 필요합니다. 그러면 루프가 중단됩니다. 귀하의 경우에는 마지막 업데이트 시간을 설정하는 기능이 필요하지 않습니다. 클라이언트에 특별한 값을 지정하여 서버에 현재 시간을 필드에 삽입하도록 지시 할 수 있습니다.

https://firebase.google.com/docs/reference/js/firebase.database.ServerValue#.TIMESTAMP

+0

답해 주셔서 감사합니다. 이처럼 마지막으로 업데이트 된 타임 스탬프를 업데이트하는 것은 실제로 내가하려는 의도가 아니었지만 클라우드 기능을 시험해보기 위해 할 것이라고 생각했습니다. –

+0

그건 공평합니다. 자동 업데이트 값은 확실히 유스 케이스입니다. 그 해지 경우에 코드를 작성하는 것이 때때로 까다로울 수 있습니다. :-) –

+0

그래, 나는이 실수를했을 때 유급 계획에 없었기 때문에 기쁘다. :) 내가 얼마나 기소되었을 지 모르겠다. 나는 그것을 밤새도록 운영하는 채로 뒀고 할당량에 도달했기 때문에 함수 콘솔을 호출 할 수없는 수많은 로그를 볼 수 있습니다. –

8

더그 맞습니다. 또한, 무한 루프에 고정 된 함수가있는 경우 정지시킬 수있는 방법은 루프에 대한 수정을 사용하여 함수 (firebase deploy 사용)를 재배포하거나 함수를 완전히 삭제하는 것입니다. index.js에서 삭제하고 firebase deploy으로 실행).

+1

클라우드 기능 중지에 대한 팁을 보내 주셔서 감사합니다. –

+2

앞으로는 admin 포털을 통해 기능을 사용하지 못하게하는 방법이 정말로 필요합니다. :) – mtb

+1

기능 요청에 대해 언급했습니다. 감사합니다! :) –

관련 문제