Firebase GET 請求未將資料傳回給客戶端
P粉448130258
P粉448130258 2024-03-20 08:18:04
0
1
356

我們有一個帶有 firestore 資料庫的應用,使用 firebase 雲端功能。我們正在嘗試從外部 API 獲取有關每個用戶的資料。我們的 firebase 雲函數正在返回資料 - 我可以在日誌中正確地看到它。但是,我在瀏覽器中看不到該數據。我猜也許我沒有正確使用 async/await?

以下是我們如何從我們的應用程式(在 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 顯示為 null

然後,這是雲端函數:

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

在函數日誌中,我可以正確地看到所有內容。

這是一個非同步/等待問題嗎?或者我回傳的數據錯誤?

謝謝!

P粉448130258
P粉448130258

全部回覆(1)
P粉696146205

我還沒有嘗試過你的程式碼,但問題很可能是由於你沒有返回 雲函數中的 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
    }
    
});
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板