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

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

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

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

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

849閲覧

firebaseのfirestoreで、コレクションの内容が空ではないのにundefinedエラーが出る

cherish

総合スコア47

Firebase

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

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2019/02/25 11:56

編集2019/02/25 12:21

事象について

Firestoreについての質問です。
下記のコードでデータを取得しています。
noticeの中身が空ではないことが確認できているのですが、その後の処理で”TypeError: Cannot read property 'get' of undefined”が出てしまいます。

typescript

1db.collection("notifications").where("type", "==", "like_comment").where("comment_ref", "==", like_snap.data().comment_ref).get().then((notice) => { 2   console.log(notice) 3 if(notice.docs[0]) { 4 notice.docs[0].ref.update({ 5 updated_at: admin.firestore.FieldValue.serverTimestamp() 6 }) 7 <=エラー発生行 8 .then(() => { 9 ---- 10 }) 11 .catch((error: any) => { 12 console.warn(error) 13 }); 14 } else { 15 ---- 16 } 17 }) 18}) 19.catch((error: any) => { 20 console.warn(error) 21})

確認できていること

console.log()でnoticeにQuerySnapShotが取得できているのは確認済みです。

エラーの理由について検討がつく方がいらっしゃいましたらご教示いただけるとありがたいです。
よろしくお願いいたします。

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

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

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

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

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

xenbeat

2019/02/25 12:07

> noticeの中身が空ではないことが確認できているのですが、その後の処理 その後の処理とはどのことですか? どこでエラーが発生しているのか、どの部分でconsole.log()したのか明確にしてください。
cherish

2019/02/25 12:23

console.log()している箇所と、エラー発生行を追記いたしました。 エラー発生行と、エラーの内容で指摘されている処理の箇所がずれている状態です。 エラー内容の71行目が上記の箇所を指しています↓ ``` TypeError: Cannot read property 'get' of undefined at db.collection.where.where.get.then (/srv/lib/notice_like_comment.js:71:39) ```
xenbeat

2019/02/25 14:51

質問者さんの方で可能な限り問題を切り分けていただくと的確な回答を得られやすくなると思います。 ちなみにwhereを除くとどうなりますか? ``` db.collection("notifications").get() ```
cherish

2019/02/26 01:23

ありがとうございます。 whereを除いても同じエラーが出る状態です。 現状、変数になっているlike_snap.data().comment_refを確実に存在するドキュメントのリファレンスするなどしても同様のエラーがでます。 ブラウザでエラーハンドリングをせずに同様のコードを実行すると下記エラーが出るため、おそらく非同期処理の失敗によりデータがとれていないのではないかと考えております。 ``` Uncaught (in promise) TypeError: Cannot read property 'get' of undefined ``` ただ、then()によってデータ取得の待機がなされると理解していたため、混乱しているところです。
guest

回答1

0

自己解決

データ取得の同期性の問題でした。
async/awaitで書き直したら動きました。

投稿2019/04/25 02:28

cherish

総合スコア47

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問