J'ai ce code qui vérifie si mes identifiants d'UserContacts existent dans une autre collection et que je retourne tous les matchs.
async function fetchCommonNumbers() { var commonNumbers = []; let contactsReference = admin.firestore().collection("user_contacts").doc("iNaYVsDCg3PWsDu67h75xZ9v2vh1").collection("contacts"); const dbContactReference = admin.firestore().collection('db_contacts_meta'); userContacts = await contactsReference.get(); userContacts = userContacts.docs; await Promise.all( userContacts.map(userContact => { const DocumentID = userContact.ref.id; //Check if Document exists return dbContactReference.doc(DocumentID).get().then(dbContact => { if (dbContact.exists) { console.log(DocumentID); commonNumbers.push(dbContact.data()); } }); })); return Promise.resolve(commonNumbers); }
3 Réponses :
Actuellement, il n'y a pas de mise en œuvre de promesses annulables (plus d'informations peut être trouvée ici Entrez la description de la liaison ici ), p>
Si vous le souhaitez, vous pouvez définir votre propre "promesse annulable" qui enveloppe une promesse normale. p>
Merci pour votre réponse! Recommandez-vous NPMJS.com/Package/Cancelable-Pomise ?
Ouais c'est un bon forfait. Veuillez noter la question comme répondu.
Il n'a pas fonctionné :( Comme je ne peux pas annuler la promesse de la promesse
Vous ne pouvez pas vraiment faire les promesses arrêter em>. Mais puisque vous cherchez à Par exemple, vous pouvez inclure une instruction conditionnelle dans votre fonction code> (code>. Comme ça p> Vos promesses seront toujours là, mais vous aurez p>
si commonnumbers.length
false code> dans mon exemple) li>
ul>
const arr = [1, 2, 3, 4, 5, 6];
const buffer = [];
const maxLenBuffer = 3;
const p = Promise.all(
arr.map(n => {
if (buffer.length < maxLenBuffer) {
buffer.push(n);
return Promise.resolve(n);
} else {
// There's still a promise to be resolved, but it's not a HTTP call
// This gives you the gain of performance you're looking for
return Promise.resolve(false);
}
})
);
p.then(() => console.log(buffer));
Je crains que cela ne fonctionnait pas. Je pense que parce que la promesse.Resolve est instantanée et retourne une promesse en attente, ce qui ne suffit pas de temps pour le si (tampon.length
C'est vrai, merci pour le commentaire. J'ai ajouté une édition pour inclure votre note
Merci pour votre édition. De plus, dans mon exemple, je vérifie si le document existe avant de l'ajouter le tableau (dans votre mémoire tampon). J'ai donc besoin de la promesse de terminer avant que je sache si cela devrait être ajouté ou non
Au lieu de briser la promesse entre les deux, je vous suggère d'utiliser le LIMIT Méthode do Firestore.
Vous pouvez interroger uniquement pour X Nombre d'enregistrements et ce x peut être corrigé ou peut provenir de l'utilisateur. Quelque chose comme: p>
La collection User_Contacts n'a que environ 500 documents, ce qui ne provoque aucun problème, le temps d'exécution est millisecondes. C'est la collection DB_Contacts_META qui aura plus tard des millions de documents. Je n'exègre que un chèque de document sur db_contacts_méta avec un chemin de saisie, donc je ne peux pas utiliser la limite. Mais mon problème est que je veux arrêter de vérifier l'existence de documents après avoir trouvé.