Dalam Firebase Cloud Functions, adakah mungkin untuk mengemas kini dokumen secara tidak segerak dengan selamat tanpa menunggu ia kembali?
P粉043432210
P粉043432210 2023-08-17 14:53:58
0
1
398
<p>Dalam fail Firebase Cloud Function saya, saya mempunyai fungsi setempat berikut yang menjalankan operasi mendapatkan dan mengemas kini dokumen sebelum mengembalikan beberapa sifat. </p> <pre class="brush:php;toolbar:false;">fungsi async getRandomDocLessThanOperator(benih) { cuba { const db = admin.firestore(); syot kilat const = menunggu db.collection("pengguna").where("rawak", "<=", seed) .limit(1) .get(); jika (snapshot.kosong) { return null; // Pemanggil kemudian mencuba yang lebih besar daripada operator } const doc = snapshot.docs[0]; doc.ref.update({"random": seed}); // Kemas kini dengan seed baharu return doc.get("uid"); } tangkap (ralat) { buang Ralat(error) baru; } }</pre> <p>Fungsi ini berfungsi dengan baik, tetapi saya bimbang untuk cuba mengemas kini dokumen secara tidak segerak sebelum kembali. Walau bagaimanapun, dalam ujian, dokumentasi tidak pernah gagal dikemas kini. Walau bagaimanapun, adakah mungkin fungsi ini tamat sebelum kemas kini selesai? </p> <p>Bagaimanapun, untuk menyelesaikan masalah, saya cuba menggunakan <kod>menunggu</code> <pre class="brush:php;toolbar:false;">const doc = snapshot.docs[0]; tunggu doc.ref.update({"rawak": seed}); kembalikan doc.get("uid");</pre> <p>Walau bagaimanapun, apabila saya melakukan ini, fungsi mengembalikan rentetan yang dijangkakan tetapi tidak mengemas kini dokumen. </p> <ol> <li>Mengapakah penambahan <kod>menunggu</kod> sebelum operasi kemas kini menghalang kemas kini? </li> <li>Adakah selamat untuk tidak menunggu kemas kini dan melakukannya secara tidak segerak seperti dalam contoh pertama? </li> </ol><p><br /></p>
P粉043432210
P粉043432210

membalas semua(1)
P粉409742142

Tidak pasti mengapa kemas kini anda tidak berfungsi (mungkin anda boleh menggunakan lebih banyak pengelogan untuk mendapatkan gambaran yang lebih jelas tentang perkara yang berlaku semasa masa jalan). Tetapi apa yang boleh saya katakan dengan pasti ialah apabila menggunakan Cloud Functions anda mesti mengembalikan janji yang diselesaikan selepas semua kerja tak segerak selesai (atau tunggu setiap janji yang dihadapi oleh ), jika tidak, fungsi itu mungkin ditutup sebelum kerja sudah selesai . Ini adalah kesilapan biasa yang dilakukan oleh pembangun.

Tidak, ini tidak "selamat" kerana anda tidak mempunyai jaminan bahawa kod tak segerak akan terus berjalan selepas fungsi ditamatkan. Anda mesti mengembalikan janji yang diselesaikan hanya selepas semua kerja tak segerak selesai.

Sila baca dokumentasi tentang perkara ini.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!