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.