Permintaan Firebase GET tidak mengembalikan data kepada pelanggan
P粉448130258
P粉448130258 2024-03-20 08:18:04
0
1
330

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粉448130258
P粉448130258

membalas semua(1)
P粉696146205

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
    }
    
});
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!