Maison  >  Questions et réponses  >  le corps du texte

La requête Firebase GET ne renvoie pas de données au client

Nous avons une application avec une base de données Firestore, utilisant les fonctions cloud de Firebase. Nous essayons d'obtenir des données sur chaque utilisateur à partir d'une API externe. Notre fonction cloud Firebase renvoie des données - je peux les voir correctement dans les journaux. Cependant, je ne vois pas ces données dans le navigateur. Je suppose que je n'utilise peut-être pas correctement async/await ?

Voici comment nous appelons la fonction depuis notre application (dans Vuex) :

async retrieveByExternalId({ commit }, payload) {
      const retrieveByExternalId = await firebase.functions().httpsCallable('retrieveByExternalId')
      retrieveByExternalId({
        id: payload
      })
      .then(result => {
        console.log(result.data)
        commit('setUserContractorPayProfile', result.data)
      })
    },

Result.data apparaît comme nul

Ensuite, voici la fonction cloud :

exports.retrieveByExternalId = functions.https.onCall(async (data, context) => {
  const id = data.id
  
  axios({
    method: "GET",
    url: `https://website/api/v2/workers/external/${id}`,
    headers: {
      accept: '*', 
      'Access-Control-Allow-Origin': '*',
      Authorization: 'API KEY'
    }
  })
  .then(response => {
    functions.logger.log("Response", " => ", response.data);
    return response.data
  })
  .catch((error) => {
    functions.logger.log("Error", " => ", error);
  })
});

Dans le journal des fonctions, je peux tout voir correctement.

Est-ce un problème d'asynchrone/d'attente ? Ou est-ce que je renvoie des données erronées ?

Merci !

P粉448130258P粉448130258213 Il y a quelques jours334

répondre à tous(1)je répondrai

  • P粉696146205

    P粉6961462052024-03-21 07:00:09

    Je n'ai pas encore essayé votre code, mais le problème est probablement dû au fait que vous ne renvoyez pas la Chaîne de promessedans la fonction cloud.

    Tu devrais faire ceci :

    return axios({  // <====== See return here
        // ...
      })
      .then(response => {
        functions.logger.log("Response", " => ", response.data);
        return response.data
      })
      .catch((error) => {
        functions.logger.log("Error", " => ", error);
      })

    Ou, puisque vous avez déclaré la fonction avec le mot-clé async,请使用 await comme ceci :

    exports.retrieveByExternalId = functions.https.onCall(async (data, context) => {
    
        try {
            const id = data.id
    
            const axiosResponse = await axios({
                method: "GET",
                url: `https://website/api/v2/workers/external/${id}`,
                headers: {
                    accept: '*',
                    'Access-Control-Allow-Origin': '*',
                    Authorization: 'API KEY'
                }
            });
    
            functions.logger.log("Response", " => ", axiosResponse.data);
            return axiosResponse.data
        } catch (error) {
            // see https://firebase.google.com/docs/functions/callable#handle_errors
        }
        
    });

    répondre
    0
  • Annulerrépondre