Heim > Fragen und Antworten > Hauptteil
Wir haben eine App mit Firestore-Datenbank, die Firebase-Cloud-Funktionen nutzt. Wir versuchen, Daten über jeden Benutzer von einer externen API abzurufen. Unsere Firebase-Cloud-Funktion gibt Daten zurück – ich kann sie in den Protokollen korrekt sehen. Allerdings sehe ich diese Daten nicht im Browser. Ich vermute, dass ich async/await vielleicht nicht richtig verwende?
So rufen wir die Funktion aus unserer Anwendung (in Vuex) auf:
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 erscheint als null
Dann ist das die Cloud-Funktion:
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); }) });
Im Funktionsprotokoll kann ich alles korrekt erkennen.
Ist das ein Asynchron-/Wartenproblem? Oder gebe ich falsche Daten zurück?
Danke!
P粉6961462052024-03-21 07:00:09
我还没有尝试过你的代码,但问题很可能是由于你没有返回 云函数中的 Promise 链。
你应该这样做:
return axios({ // <====== See return here // ... }) .then(response => { functions.logger.log("Response", " => ", response.data); return response.data }) .catch((error) => { functions.logger.log("Error", " => ", error); })
或者,由于您声明了函数 async
,请使用 await
关键字,如下所示:
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 } });