>  Q&A  >  본문

Firebase Cloud Functions에서는 문서가 반환될 때까지 기다리지 않고 문서를 비동기식으로 안전하게 업데이트할 수 있나요?

<p>내 Firebase 클라우드 함수 파일에는 일부 속성을 반환하기 전에 문서 가져오기 및 업데이트 작업을 수행하는 다음과 같은 로컬 함수가 있습니다. </p> <pre class="brush:php;toolbar:false;">비동기 함수 getRandomDocLessThanOperator(seed) { 노력하다 { const db = admin.firestore(); const snapshot = db.collection("users").where("random", "<=", seed)를 기다립니다. .한도(1) .얻다(); if (스냅샷.비어 있음) { return null; // 그런 다음 호출자는 보다 큼 연산자를 시도합니다. } const doc = snapshot.docs[0]; doc.ref.update({"random": seed}); // 새로운 시드로 업데이트 return doc.get("uid"); } 잡기(오류) { 새로운 오류 발생(오류); } }</pre> <p>이 함수는 잘 작동하지만 반환하기 전에 문서를 비동기적으로 업데이트하려고 시도하는 것이 걱정됩니다. 그러나 테스트에서는 문서 업데이트가 실패한 적이 없습니다. 하지만 업데이트가 완료되기 전에 이 기능이 시간 초과될 가능성이 있습니까? </p> <p>어쨌든 문제를 해결하기 위해 <code>await</code>를 사용하여 업데이트를 기다려 보았습니다. </p> <pre class="brush:php;toolbar:false;">const doc = snapshot.docs[0]; doc.ref.update({"random": 시드})를 기다립니다; return doc.get("uid");</pre> <p>그러나 이렇게 하면 함수가 예상한 문자열을 반환하지만 문서를 업데이트하지 않습니다. </p> <올> <li>업데이트 작업 전에 <code>await</code>를 추가하면 업데이트가 방지되는 이유는 무엇입니까? </li> <li>업데이트를 기다리지 않고 첫 번째 예처럼 비동기적으로 수행하는 것이 안전한가요? </li>


P粉043432210P粉043432210398일 전406

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

  • P粉409742142

    P粉4097421422023-08-18 09:09:51

    업데이트가 작동하지 않은 이유를 잘 모르겠습니다(런타임에 무슨 일이 일어나고 있는지 더 명확하게 파악하기 위해 더 많은 로깅을 사용할 수도 있습니다). 하지만 확실히 말할 수 있는 것은 Cloud Functions를 사용할 때 비동기 작업이 모든 완료된 후(또는 에서 발생한 각 약속을 기다려야 함) 해결되는 약속을 반환해야 한다는 것입니다. 그렇지 않으면 작업이 완료되기 전에 함수가 닫힐 수 있습니다. 완성 됐습니다 . 이는 개발자가 흔히 저지르는 실수입니다.

    아니요, 함수가 종료된 후에도 비동기 코드가 계속 실행된다는 보장이 없기 때문에 이는 "안전"하지 않습니다. 모든 비동기 작업이 완료된 후에만 해결되는 Promise를 반환해야 합니다.

    이에 대한 문서를 읽어보세요.

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