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粉6961462052024-03-21 07:00:09
コードはまだ試していませんが、問題の原因はおそらく、クラウド関数 で Promise チェーンを返さないことです。
これを行う必要があります:
return axios({ // <====== ここで return を参照 // ... }) .then(応答 => { function.logger.log("応答", " => ", response.data); 応答データを返す }) .catch((エラー) => { function.logger.log("エラー", " => ", エラー); })
あるいは、関数 async
を宣言したので、次のように await
キーワードを使用します。
返事0