質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

4239閲覧

Cloud Functions callしても戻り値がnullしか返ってこない

gogojp

総合スコア211

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/06/23 10:18

クライアント側で関数をコールしたら、FireStoreのtestコレクションの全てのドキュメントを返すのを作っています。
公式ドキュメントと解説サイトをいくつか見て書いたコードが以下になります。
デプロイも問題なく、jsonを返す前のconsole.log(json)では、Firebaseのコンソールで一覧が返ってるのを確認済みです。
しかし、クライアント側の戻り値は{data: null}しか返ってこず、Firebaseのコンソールで確認出来たdocの一覧のデータがありません。
数時間格闘しましたが、結局解決策がわからずじまいです。
何か間違っていることや解決方法を知っている方がいましたらご教授お願いします。

js

1// index.js 2 3if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === 'getDocList') { 4 exports.getDocList = require('./funcation/function/getDocList.js'); 5}

js

1// function/getDocList.js 2 3const functions = require('firebase-functions'); 4const admin = require('firebase-admin'); 5 6admin.initializeApp(functions.config().firebase) 7 8const db = admin.firestore() 9 10module.exports = functions.https.onCall((data, ctx) => { 11 db.collection("test").get().then(function(querySnapshot) { 12 let json = {} 13 querySnapshot.forEach(function(doc) { 14 json[doc.id] = doc.data() 15 }) 16  console.log(json) 17 return json 18 }) 19})

vue

1 2<script> 3// Nuxt page/index.vue 4 5import firebase from 'firebase' 6 7export default { 8 mounted() { 9 firebase 10 .functions() 11 .httpsCallable('getDocList') 12 .call() 13 .then(result => { 14 console.log(result) 15 }) 16 .catch(err => { 17 console.log(err) 18 }) 19 } 20} 21</script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

非同期処理を待機していないのが原因です。Promiseを関数の返り値として返して、待機させるよう修正してみてください。

ドキュメント: https://firebase.google.com/docs/functions/terminate-functions?hl=ja#how_promises_work_with_functions

投稿2019/06/23 11:32

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gogojp

2019/06/23 11:54

Promiseをreturnすることで値を返すことが出来ました。 ありがとうございます。 module.exports = functions.https.onCall((data, ctx) => { return new Promise(function(resolve, reject) { db.collection("test").get().then(function(querySnapshot) { let json = {} querySnapshot.forEach(function(doc) { json[doc.id] = doc.data() }) resolve(json) }) }) })
kakajika

2019/06/23 11:58

FirestoreのgetはPromiseを返すメソッドですから、new Promise() { ... } で囲む必要はありませんよ。元々のコードにreturnを加えるだけでいいはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問