Мне нужно удалить всю коллекцию с несколькими документами при удалении пользователя, поэтому я решил создать функцию, чтобы она запускалась при удалении пользователя.
Ниже приведен код.
Облачные функции (index.js):
exports.onUserDeleted = functions.auth.user().onDelete((user) => {
deleteCollection(admin.firestore(), user.uid, 15);
});
function deleteCollection(db, collectionPath, batchSize) {
var collectionRef = db.collection(collectionPath);
var query = collectionRef.orderBy('__name__').limit(batchSize);
return new Promise((resolve, reject) => {
deleteQueryBatch(db, query, batchSize, resolve, reject);
});
}
function deleteQueryBatch(db, query, batchSize, resolve, reject) {
query.get()
.then((snapshot) => {
// When there are no documents left, we are done
if (snapshot.size === 0) {
return 0;
}
// Delete documents in a batch
var batch = db.batch();
snapshot.docs.forEach((doc) => {
batch.delete(doc.ref);
});
return batch.commit().then(() => {
return snapshot.size;
});
}).then((numDeleted) => {
if (numDeleted === 0) {
resolve();
return;
}
// Recurse on the next process tick, to avoid
// exploding the stack.
process.nextTick(() => {
deleteQueryBatch(db, query, batchSize, resolve, reject);
});
})
.catch(reject);
}
При попытке выполнить команду firebase deploy --only functions возникает следующая ошибка:
65:11 предупреждение Ожидается, что стрелочная функция не вернет значение непротиворечивый возврат
65:18 предупреждение Избегайте вложенности обещает / нет вложенности
69:11 error Каждый then () должен возвращать значение или выдавать обещание / всегда-возврат
✖ 3 проблемы (1 ошибка, 2 предупреждения)
Что я делаю неправильно?
Как я могу удалить всю коллекцию при удалении пользователя?
Если вы можете опубликовать приведенный выше код с логикой, которую я должен применить, я буду очень благодарен.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сделайте следующее:
const db = admin.firestore();
exports.onUserDeleted = functions.auth.user().onDelete((user) => {
const collectionRef = db.collection(user.uid);
var promises = [];
return collectionRef.get()
.then(qs => {
qs.forEach(docSnapshot => {
promises.push(docSnapshot.ref.delete());
});
return Promise.all(promises);
})
.catch(error => {
console.info(error);
return false;
});
});
Как отражено в вашем коде и как указано в документации (см. Отрывок ниже), вы можете удалять документы партиями, если коллекция очень большая. Я позволю вам адаптировать для этого приведенный выше код, если вы сочтете это необходимым.
If you have larger collections, you may want to delete the documents in smaller batches to avoid out-of-memory errors. Repeat the process until you've deleted the entire collection or subcollection. Source: https://firebase.google.com/docs/firestore/manage-data/delete-data#collections