Heim  >  Fragen und Antworten  >  Hauptteil

Ist es in Firebase Cloud Functions möglich, ein Dokument sicher asynchron zu aktualisieren, ohne auf seine Rückkehr warten zu müssen?

<p>In meiner Firebase Cloud Functions-Datei habe ich die folgende lokale Funktion, die einen Dokumentenabruf- und -aktualisierungsvorgang ausführt, bevor einige Eigenschaften zurückgegeben werden. </p> <pre class="brush:php;toolbar:false;">asynchrone Funktion getRandomDocLessThanOperator(seed) { versuchen { const db = admin.firestore(); const snapshot = waiting db.collection("users").where("random", "<=", Seed) .limit(1) .erhalten(); if (snapshot.empty) { return null; // Der Aufrufer versucht dann den Größer-als-Operator } const doc = snapshot.docs[0]; doc.ref.update({"random": seeds}); // Mit neuem Seed aktualisieren return doc.get("uid"); } Catch (Fehler) { throw new Error(error); } }</pre> <p>Diese Funktion funktioniert einwandfrei, aber ich mache mir Sorgen, dass ich versuche, das Dokument vor der Rückkehr asynchron zu aktualisieren. Beim Testen konnte die Dokumentation jedoch immer wieder aktualisiert werden. Ist es jedoch möglich, dass diese Funktion abläuft, bevor das Update abgeschlossen ist? </p> <p>Um das Problem zu beheben, habe ich versucht, mit <code>await</code> auf Updates zu warten: </p> <pre class="brush:php;toolbar:false;">const doc = snapshot.docs[0]; Warten Sie auf doc.ref.update({"random": Seed}); return doc.get("uid");</pre> <p>Wenn ich dies jedoch mache, gibt die Funktion die erwartete Zeichenfolge zurück, aktualisiert das Dokument jedoch nicht. </p> <ol> <li>Warum verhindert das Hinzufügen von <code>await</code> vor dem Aktualisierungsvorgang die Aktualisierung? </li> <li>Ist es sicher, nicht auf Aktualisierungen zu warten und diese asynchron durchzuführen, wie im ersten Beispiel? </li> </ol><p><br /></p>
P粉043432210P粉043432210449 Tage vor449

Antworte allen(1)Ich werde antworten

  • P粉409742142

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

    不清楚为什么您的更新没有起作用(也许您可以使用更多的日志记录来清楚地了解运行时发生了什么)。但是我可以肯定地说,在使用Cloud Functions时,您必须返回一个在所有异步工作完成后解决的承诺(或者等待遇到的每个承诺),否则函数可能在工作完成之前被关闭。这是开发人员常犯的错误。

    不,这是不“安全”的,因为您无法保证异步代码在函数终止后是否会继续运行。您必须返回一个只在所有异步工作完成后解决的承诺。

    请阅读有关此的文档

    Antwort
    0
  • StornierenAntwort