ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

データストアのデータ存在判定について

f:id:mbaasdevrel:20180913163950p:plain

データストアはmBaaSにおいて最もよく使われる機能かと思います。プッシュ通知や会員管理などもベースとしてデータストアを使っていますので、データストアの基本を押さえれば、mBaaSがぐっと使いやすくなるでしょう。

今回はJavaScript SDK利用時のデータストア検索において、データの存在確認を行う方法を紹介します。

fetchAllを使った場合

例えばデータストアを検索したとします。

const items = await Item.fetchAll();

この時、条件に当てはまる結果があったかどうかは次のように判定できます。

if (items.length === 0) {
  // 結果が一件もなし
} else {
  // 結果あり
}

また、検索結果がなかった = エラーではないので注意してください。then/catchを使った場合、検索結果が0件なのはthenになります。エラーが発生するのは署名が不正であったり、ネットワークのエラーなどによって発生します。

Item.fetchAll()
  .then(results => {
    if (results.length === 0) {
      // 結果が1件もなし
    } else {
      // 結果あり
    }
  })
  .catch(err => {
    // エラー発生
  })

async/awaitを使う場合には、try/catchで例外処理を補足してください。

try {
  const items = await Item.fetchAll();
  if (items.length === 0) {
    // 結果が一件もなし
  } else {
    // 結果あり
  }
} catch (err) {
  // エラー発生
}

fetchの場合

データを1件だけ返すfetchの場合はもう少し注意が必要です。データがない場合、空のオブジェクト({})が返ってきます。

const item = await Item.fetch();

この空のオブジェクトはtrue/falseの判定でいうと、trueになります。そのため、次のような書き方はできません。

// ダメな例
const item = await Item.fetch();
if (item) {
  // データがある場合
} else {
  // データがない場合
}

判定する際には Object.keys を使います。これはオブジェクトのキーだけを返すメソッドです。そして、その数を数えて判定します。

// いい例
const item = await Item.fetch();
if (Object.keys(item).length === 0) {
  // データがない場合
} else {
  // データがある場合
}

まとめ

データストアのデータ存在チェックはアプリを作る上でよく行われるかと思います。今回紹介した書き方を使って、アプリのスムーズな開発に役立ててください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。