Realtime Database triggers (pt.2) with Cloud Functions for Firebase – Firecasts

DOUG STEVENSON : 이봐, 파이어베이스 개발자 제 이름은 더그입니다

다시 환영합니다 Firebase 실시간 데이터베이스에 대한이 미니 시리즈 클라우드 기능에서 트리거합니다 마지막 비디오에서 나는 데이터베이스를 구현했다 단어를 변경하는 onCreate를 사용하여 트리거 채팅에 추가 된 모든 새 메시지의 피자 그림 이모로 "피자" 방 그것은 위대한 작품

누군가가 메시지를 수정하면 작동하지 않습니다 추가 된 후 onCreate 트리거는 다음과 같은 경우에만 발생합니다 새 노드가 데이터베이스에 나타납니다 구성된 경로와 일치합니다

우리에게 응답하는 코드를 작성하고 싶다면 데이터베이스의 동일한 위치에서의 변경, 그것을 위해 onUpdate 트리거를 사용할 수 있습니다 onCreate와 비슷하지만 몇 가지 중요한 차이점이 있습니다 콘솔에서 바로 살펴 보겠습니다 여기에서 일련의 메시지를 볼 수 있습니다 내가 쓴 스크립트로 채워져있다

"피자"라는 단어는 이미 몇 곳에서 이모티콘으로 바뀌 었습니다 메시지 중 하나를 편집하고 거기에있는 "피자"라는 단어는 대체되지 않습니다 그러나 추가 트리거가 발생하면이를 수행 할 수 있습니다 따라서 VS 코드로 전환하여 프로젝트에 추가 할 것입니다 먼저 트리거를 만들면 트리거를 만듭니다

지난번부터 새 메시지의 원시 데이터를 가져옵니다 텍스트 속성을 꺼내서 대체 pizzazz 함수를 사용하여 대체합니다 그런 다음 업데이트 된 문자열을 다시 데이터베이스에 씁니다 onUpdate 트리거는 onCreate 트리거와 비슷하지만, 그래서 함수 정의를 복사해서 아래에 붙여 넣을 것입니다

그런 다음 이름을 onMessage 업데이트로 변경하고 변경합니다 onUpdate에 onCreate onCreate를위한 핸들러 함수 스냅 샷 및 컨텍스트를 제공했습니다 그러나 onUpdate는 다릅니다 onUpdate를 마우스로 가리키면 나에게 그 핸들러 함수가 여기에옵니다

변경 객체 및 컨텍스트를 정의합니다 컨텍스트는 onCreate와 동일하지만, 그러나 변경 객체는 다릅니다 변경 객체 유형 자체는 제네릭 유형입니다 여기서 매개 변수화 된 것을 볼 수 있습니다 데이터 스냅 샷 유형 (스냅 샷과 동일) onCreate에 전달 된 유형입니다

그러면이 변경 객체는 무엇입니까? 뭔가있을 때 onUpdate 트리거 발생 방아쇠 위치에서 데이터베이스에서 변경되었습니다 이 변경 개체가 당신에게 말하고 있습니다 전후의 그 위치의 내용 업데이트 이것을 사용하여 정확히 어떤 데이터를 파악할 수 있습니까? 해당 위치의 데이터베이스에서 변경되었습니다 변경 개체에는 두 가지 속성이 있습니다

전후에 전화 했어 이 변경 개체의 경우 제네릭 형식에서 필요에 따라 데이터 스냅 숏 개체가됩니다 변화의 좋아, 사용하자 나는 정말로 데이터베이스의 새로운 내용에 관심이있다 업데이트 후

그래서 그 스냅 샷을 얻기 위해 after 속성을 사용할 것이다 원시 메소드를 호출하여 val 메소드를 호출하여 원시 데이터를 가져옵니다 그럼 나는 onCreate에서했던 것과 똑같은 일을 할 수있다 텍스트 문자열을 꺼내서 add pizzazz 메소드를 호출하고 결과를 저장하십시오 그런 다음 이후 스냅 샷의 참조를 사용할 수 있습니다

새 텍스트를 데이터베이스에 다시 쓰십시오 내가 여기있는 동안 내가하고 싶은 또 하나의 일이있다 다른 자식 값을 추가합니다 편집 타임 스탬프로 데이터베이스에 저장합니다 꽤 쉽습니다

아, 그리고 업데이트가 약속을 되 돌리는 것을 기억하십시오 그래서 우리는 그 약속으로부터 그 기능을 되 찾을 필요가있다 클라우드 기능이 모든 것을 기다리는 청소하기 전에 끝내야합니다 끝났어 그렇지? 우리는 확실히 끝나지 않았습니다

실제로 여기에 하나의 큰 문제가 있습니다 처음에는 분명하지 않습니다 이 기능이 무엇을하는지 생각해보십시오 업데이트가있을 때 실행 중입니다 데이터베이스의 한 위치에서 다른 업데이트를 수행합니다

그 같은 위치에 이것은 함수가 효과적으로 자체적으로 트리거된다는 것을 의미합니다 그 두 번째 변화와 함께 다시 또 하나의 변화와 영원한 변화를 일으킬 것입니다 그게 나쁘지 않다고 너에게 말할 필요가 없다고 확신한다 거기에 이것이 일종의 것이기 때문에 모든 함수 호출에 대해 많은 비용이들 수 있습니다

그리고 문제를 해결하기 위해 나서야합니다 그래서 우리는 분명히이 광기를 막을 방법이 필요합니다 다행히도 몇 가지 추가 코드를 사용하여이를 수행 할 수 있습니다 여기서해야 할 일은 메시지 텍스트를 비교하는 것입니다 전후 스냅 샷에서 따라서 변경하기 전에 데이터를 보류하겠습니다

그런 다음 메시지가 표시되는지 확인합니다 텍스트가 전혀 변경되지 않았습니다 변경 사항이 없다면 아무 것도 없습니다 이 기능을 사용하려면 이 기능을 트리거 한 변경 사항은 아마도 새로운 타임 스탬프가 편집되었습니다 이 경우 약속 대신 null을 반환 할 수 있습니다

클라우드 기능에 대한 추가 작업이 필요하지 않습니다 나는 이것이 내가 지금 원하는 것을해야한다고 생각한다 그래서 그것을 배포 할 것입니다 그리고 그것이 끝나면, 나는 그것을 줄 것이다 Firebase 콘솔에서 시도해보십시오

콘솔에서 메시지 중 하나의 텍스트를 변경하고, 피자를 그 위에 넣고 그 피자를 보아라 즉시 emojified 얻으십시오 좋은 조심스럽게 생각하는 것이 중요합니다 다시 쓰는 onUpdate 트리거 작성 방아쇠의 동일한 위치로 그렇지 않으면 나쁜 상황에 처할 수 있습니다

무한 루프로 인해 수정해야 할 시간과 비용이 들게됩니다 onWrite 트리거에도 동일하게 적용됩니다 당신이 그것을 사용하기로 결정한다면 하지만 onCreate 또는 onDelete에서이 문제가 발생하지 않습니다 트리거

그러나 모든 종류의 데이터베이스 트리거에서, 다중 트리거가 발생할 때 어떤 일이 발생하는지 생각해야합니다 동시에 발사하고 코드를 올바르게 작성하십시오 그 상황에서 다음에 그 일을하는 법을 보여 드리겠습니다 새로운 onDelete 트리거와 함께 아직 구독하지 않았다면 반드시 구독하십시오

YouTube의 Firebase 채널 바로 여기 그게 언제 준비되는지 알아봐 그리고 나는 너를 볼거야 [음악 재생]