Je veux récupérer des données de Cloud Firestore, puis renvoyez ces données sur une carte. Le problème est que le système renvoie la valeur avant sa récupération et la promesse est en attente. J'ai essayé beaucoup de choses mais je ne suis pas capable de résoudre le problème. Ce serait génial si quelqu'un pouvait m'aider avec ça!
function homepage(formData) { var cfire = cfirebase.firestore().collection('Details').doc('dsadsadasdsadasdsdsdasd'); const test = cfire.get().then(doc => { if (doc.exists) { Name = doc.data().dd.dn; vehical = doc.data().dd.vn; vehicalNumber = doc.data().dd.vno; console.log(Name, vehical, vehicalNumber); } else if (!doc.exists) { console.log("Detail does not exist"); return Promise.reject(new Error('Detail does not exist')); } else { throw Promise.reject(new Error('Server error!')); } }).catch(e => { return false }); return { tripID: { c: false, dd: { // Driver name dn: Name, // Vehical name vn: vehical, // Vehical number vno: vehicalNumber, } } }; }
3 Réponses :
La raison pour laquelle votre fonction renvoie l'objet avant de rechercher des données de Cloud Fireestore est parce que Vous devez lire sur Je vous suggère de changer votre fonction Option n ° 1 Strong> p > cfirebase.firestore (). Collection (...). Doc (...) code> est asynchrone et il renvoie un
promess code>, vous devez donc attendre ce
prometteur code> pour résoudre avant de renvoyer l'objet final.
Programmation asynchrone Code> Si vous ne connaissez pas le concept: p>
page d'accueil code> de sorte qu'il renvoie un
prometteur code> ou utilise
async / attendre code> pour attendre cfire.get () code> Pour résoudre avec une certaine valeur avant de
retourner code> l'objet final. p>
async function homepage(formData) {
try {
const cfire = cfirebase.firestore().collection(...).doc(...)
const doc = await cfire.get()
if (!doc) {
throw new Error("Server error")
}
if (!doc.exists) {
throw new Error("Details does not exist")
}
// ...
return {
tripID: {...}
}
} catch(error) {
throw error
}
}
// then
homepage(...)
.then(result => {...})
.catch(error => {...})
Ceci est dû à la nature asynchrone de JS. Ecrivez-vous des déclarations de retour dans le bloc '.Chen'.
function homepage(formData) { var cfire = cfirebase.firestore().collection('Details').doc('dsadsadasdsadasdsdsdasd'); const test = cfire.get().then(doc => { if (doc.exists) { Name = doc.data().dd.dn; vehical = doc.data().dd.vn; vehicalNumber = doc.data().dd.vno; console.log(Name, vehical, vehicalNumber); return { tripID: { c: false, dd: { // Driver name dn: Name, // Vehical name vn: vehical, // Vehical number vno: vehicalNumber, } } }; } else if (!doc.exists) { console.log("Detail does not exist"); return Promise.reject(new Error('Detail does not exist')); } else { throw Promise.reject(new Error('Server error!')); } }).catch(e => { return false });
Vous pouvez faire comme ça et appeler la fonction comme ceci p>
Pouvez-vous s'il vous plaît clarifier comme je ne suis pas capable de voir une carte ici dans votre code. Essayez d'être plus précis Quelle est votre sortie souhaitée et quelle est la sortie actuelle. Partagez des captures d'écran également.