У меня есть функция, которая отображает каждый элемент массива (в данном случае адреса электронной почты), получая массив обещаний, которые должны разрешаться для идентификаторов документов, автоматически генерируемых Firebase (т. Е. hAvJ3qPq821tq1q2rrEv, 0tjeKB1aW8jsOAse5fcP
).
async function addMultipleParticipants(participant_emails: Array<string>) {
console.log("Parallelizing participant processing");
const promises = participant_emails.map(addParticipant);
const document_ids = await Promise.all(promises);
console.log("Final document ids: " + document_ids);
return document_ids;
};
Вот функция, которая возвращает идентификаторы документов, в зависимости от того, может ли он найти существующий документ, связанный с адресом электронной почты или необходимый для создания нового документа.
async function addParticipant(email_address: string) {
try {
console.log("Querying for person");
const query = await db.collection('people')
.where('emails', 'array-contains', email_address)
.limit(1);
const querySnapshot = await query.get();
if (!querySnapshot.empty) {
console.log("Document exists for email " + email_address);
// TODO: There is only one, so we shouldn't have to iterate
querySnapshot.forEach(function(docRef: any) {
console.log("New document id: " + docRef.id);
const document_id = docRef.id;
return document_id;
});
} else {
console.log("Creating person with " + email_address);
const fields = {emails: [email_address]};
try {
const docRef = await db.collection('people').add(fields);
console.log("New document id: " + docRef.id);
const document_id = docRef.id;
return document_id;
} catch (err) {
console.log("Error adding document:", err);
}
}
} catch (err) {
console.log("Error getting document:", err);
}
};
Когда все электронные письма участника неВ документах пока нет, функции работают должным образом, и console.log()
выводит Final document ids: hAvJ3qPq821tq1q2rrEv, 0tjeKB1aW8jsOAse5fcP
.
Однако, когда хотя бы один адрес электронной почты связан с существующим документом, обещания addParticipant()
неразрешить что-либо и console.log()
выводит Final document ids: ,
.
В этом сценарии что мне нужно сделать, чтобы убедиться, что массив обещаний разрешается правильно в addMultipleParticipants()
?