Firebase GET请求未向客户端返回数据

brgchamk  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(99)

我们有一个带有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 shows as 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);
  })
});

在函数日志中,我可以正确地看到一切。
这是一个异步/等待问题吗?还是我返回的数据错误?
谢谢!

i7uq4tfw

i7uq4tfw1#

我还没有试过你的代码,但问题很可能是由于你没有在你的云函数中返回承诺链。
您应该执行以下操作之一:

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

相关问题