javascript — обработка заданий пожарного депо с помощью обещаний

Обработка заданий пожарного магазина с помощью Promises

Вы можете использовать Promise.all для возврата Promise после завершения всех действий delete() , которые вы можете использовать с then() / catch() для выполнения действия или обработки ошибок. Поскольку delete возвращает Promise{amp}lt;void{amp}gt; мы можем помещать каждое действие удаления в массив обещаний, которые мы можем использовать с Promise.all() :

 function foo(user_uid) { return db.collection("users").doc(user_uid).collection("grades").doc("g").collection("es111").get().then(function(querySnapshot) { let promises = []; querySnapshot.forEach(function(doc) { // add each delete() promise to promises array promises.push(db.collection("users").doc(user_uid).collection("grades").doc("g").collection("es111").doc(doc.id).delete()); // or more simply // promises.push(doc.ref.delete()); }); return Promise.all(promises); }) .catch(function(error) { console.log("Error getting documents: ", error); }); } // ... // usage foo() .then(() ={amp}gt; console.log('Success!')) .catch(err ={amp}gt; console.error(err)); 

Другой вариант, который следует рассмотреть, — это использование пакетных записей :

 db.collection("users").doc(user_uid).collection("grades").doc("g").collection("es111").get().then(function(querySnapshot) { const batch = db.batch(); querySnapshot.forEach(function(doc) { batch.delete(doc.ref); }); return batch.commit(); }) .then(() ={amp}gt; console.log('Batched delete completed!')); 

Похоже, пакетная запись поддерживает максимум 500 операций одновременно. Обратите внимание, что вы можете просто удалить, используя DocumentSnapshot.ref для ссылки на отдельный документ, а не переписывать запрос.

Надеюсь, это поможет!

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector