ホームページ  >  に質問  >  本文

Firebase GET リクエストがクライアントにデータを返さない

Firebase クラウド機能を使用して、Firestore データベースを備えたアプリがあります。外部 API から各ユーザーに関するデータを取得しようとしています。 Firebase クラウド関数はデータを返しています。ログで正しく確認できます。ただし、ブラウザーにはそのデータが表示されません。おそらく async/await を正しく使用していないのではないかと思います。

アプリケーション (Vuex 内) から関数を呼び出す方法は次のとおりです:

asyncretrieveByExternalId({ commit }, payload) {
      constretrieveByExternalId = await firebase.functions().httpsCallable('retrieveByExternalId')
      外部 ID で取得({
        ID: ペイロード
      })
      .then(結果 => {
        コンソール.ログ(結果.データ)
        commit('setUserContractorPayProfile', result.data)
      })
    },

Result.data が null として表示される

次に、これがクラウド機能です:

exports.retrieveByExternalId = function.https.onCall(async (data, context) => {
  const id = データ.id
  
  アクシオス({
    メソッド: "GET"、
    URL: `https://website/api/v2/workers/external/${id}`、
    ヘッダー: {
      受け入れる: '*'、
      'アクセス制御-許可-オリジン': '*',
      権限: 「API キー」
    }
  })
  .then(応答 => {
    function.logger.log("応答", " => ", response.data);
    応答データを返す
  })
  .catch((エラー) => {
    function.logger.log("エラー", " => ", エラー);
  })
});

関数ログでは、すべてが正しく表示されています。

これは非同期/待機の問題ですか?それとも間違ったデータを返しているのでしょうか?

###ありがとう!

P粉448130258P粉448130258213日前336

全員に返信(1)返信します

  • P粉696146205

    P粉6961462052024-03-21 07:00:09

    コードはまだ試していませんが、問題の原因はおそらく、クラウド関数 Promise チェーンを返さないことです。

    これを行う必要があります:

    return axios({ // <====== ここで return を参照
        // ...
      })
      .then(応答 => {
        function.logger.log("応答", " => ", response.data);
        応答データを返す
      })
      .catch((エラー) => {
        function.logger.log("エラー", " => ", エラー);
      })

    あるいは、関数 async を宣言したので、次のように await キーワードを使用します。

    exports.retrieveByExternalId = function.https.onCall(async (data, context) => { 試す { const id = データ.id const axiosResponse = await axios({ メソッド: "GET"、 URL: `https://website/api/v2/workers/external/${id}`、 ヘッダー: { 受け入れる: '*'、 'アクセス制御-許可-オリジン': '*', 権限: 「API キー」 } }); function.logger.log("レスポンス", " => ", axiosResponse.data); axiosResponse.data を返す } キャッチ (エラー) { // https://firebase.google.com/docs/functions/callable#handle_errors を参照してください } });

    返事
    0
  • キャンセル返事