cari

Rumah  >  Soal Jawab  >  teks badan

Permintaan Firebase GET tidak mengembalikan data kepada pelanggan

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粉448130258P粉448130258258 hari yang lalu359

membalas semua(1)saya akan balas

  • P粉696146205

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

    balas
    0
  • Batalbalas