0
votes

Comment attendre que les données soient récupérées de Cloud Fireestore, puis de les renvoyer dans Nodejs?

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,
            }
        }
    };
}


1 commentaires

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.


3 Réponses :


2
votes

La raison pour laquelle votre fonction renvoie l'objet avant de rechercher des données de Cloud Fireestore est parce que 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.

Vous devez lire sur Programmation asynchrone Code> Si vous ne connaissez pas le concept: p>

  • Programmation asynchrone LI> ul>

    Je vous suggère de changer votre fonction 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>

    Option n ° 1 Strong> 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 => {...})
    


0 commentaires

0
votes

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
});


0 commentaires

0
votes

Vous pouvez faire comme ça xxx

et appeler la fonction comme ceci xxx


0 commentaires