Rumah > Soal Jawab > teks badan
Kami mempunyai apl dengan pangkalan data firestore, menggunakan fungsi awan firebase. Kami cuba mendapatkan data tentang setiap pengguna daripada API luaran. Fungsi awan firebase kami mengembalikan data - saya dapat melihatnya dengan betul dalam log. Walau bagaimanapun, saya tidak melihat data itu dalam penyemak imbas. Saya rasa mungkin saya tidak menggunakan async/menunggu dengan betul?
Begini cara kami memanggil fungsi daripada aplikasi kami (dalam 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 muncul sebagai batal
Kemudian, ini ialah fungsi awan:
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); }) });
Dalam log fungsi saya dapat melihat semuanya dengan betul.
Adakah ini isu tidak segerak/menunggu? Atau adakah saya mengembalikan data yang salah?
Terima kasih!
P粉6961462052024-03-21 07:00:09
Saya belum mencuba kod anda lagi, tetapi masalahnya berkemungkinan besar disebabkan anda tidak mengembalikan rantai Janjidalam fungsi awan.
Anda harus melakukan ini:
return axios({ // <====== See return here // ... }) .then(response => { functions.logger.log("Response", " => ", response.data); return response.data }) .catch((error) => { functions.logger.log("Error", " => ", error); })
Atau, kerana anda mengisytiharkan fungsi dengan kata kunci async
,请使用 await
seperti ini:
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 } });