dropout26
@dropout26

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Firestoreを使用してTypeError: _query2 is not a functionと表示された

解決したいこと

Firestoreでクエリを呼び出した時に、TypeErrorが発生します。
エラーメッセージに_query2とありますが、これが意味する対象がわかりません。

発生している問題・エラー

Uncaught (in promise) TypeError: _query2 is not a function
    at _callee$ (firestore.js?bc16:11)
    at tryCatch (runtime.js?96cf:63)
    at Generator.invoke [as _invoke] (runtime.js?96cf:294)
    at Generator.eval [as next] (runtime.js?96cf:119)
    at asyncGeneratorStep (asyncToGenerator.js?1da1:3)
    at _next (asyncToGenerator.js?1da1:25)
    at eval (asyncToGenerator.js?1da1:32)
    at new Promise (<anonymous>)
    at eval (asyncToGenerator.js?1da1:21)
    at getAllData (firestore.js?bc16:3)

該当するソースコード

firestore.js
import { query, startAfter, limit, getDocs, getFirestore, collection, orderBy } from "firebase/firestore";

const getAllData = async (lim, lastSnapshot) => {
  let nextSnapshot = "";
  if (lastSnapshot) {
    let query = query(collection(getFirestore(), "users"),
      orderBy("lastlogin", "desc"),
      limit(lim),
      startAfter(lastSnapshot));
  } else {
    let query = query(collection(getFirestore(), "users"),
      orderBy("lastlogin", "desc"),
      limit(lim));
  }
  try {
    const querySnapshots = await getDocs(query);
    if (querySnapshots.docs.length >= lim) {
      nextSnapshot = querySnapshots.docs[querySnapshots.docs.length - 1];
    }
    return { "BuffData": querySnapshots, "lastSnapshot": nextSnapshot };
  } catch (e) {
    console.log(e);
  }
}

export { getAllData }

自分で試したこと

Firebaseのドキュメントを見ながら書いたのですが、そもそも_query2が何を指すのかが分からず困っています。
query()の2番目の引数という意味なのかなと思っているのですが、この_query2の命名規則を教えていただければと思います。

0

1Answer

letで宣言した変数は、そのブロックの外では使えません。(ブロックスコープ)
getDocsに与えているqueryは冒頭でimportしてきたものです。
そもそも名称を分けるべきでしょうね。

  let q;
  if (lastSnapshot) {
    q = query(  // ...

とか

  const queryArgs = [
    collection(getFirestore(), "users"),
    orderBy("lastlogin", "desc"),
    limit(lim)
  ];
  if (lastSnapshot) {
    queryArgs.push(startAfter(lastSnapshot));
  }
  const q = query(...queryArgs);
0Like

Comments

  1. @dropout26

    Questioner

    ありがとうございます、ブロックスコープを失念しておりました。
    ところで後学のためにお教えいただきたいのですが、この_query2とはなんなのでしょうか?

Your answer might help someone💌