Maison > Questions et réponses > le corps du texte
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粉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 } });