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

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

データストアを拡張するncmb-extendに複数オブジェクトを一括保存するメソッドを追加しました

https://cdn-ak.f.st-hatena.com/images/fotolife/m/mbaasdevrel/20171212/20171212211252.png

データストアは処理対象がオブジェクト単位となっています。そのためデータを一括で処理したい時に、繰り返し処理を呼び出す必要があります。さらにAPI周りは非同期処理になるので、通常のループ処理を使うと大量のアクセスが一気に発生してしまい、サーバからアクセスを拒否される可能性があります。

そこでデータストアを拡張するライブラリ、ncmb-extendの中に複数オブジェクトをまとめて保存するメソッド、saveallを追加しました。

使い方

コードで書くと次のようになります。複数作ったオブジェクトをまとめて保存処理します。

const ary = [];
const Example = ncmb.DataStore('Example');
ary.push(new Example({ name: 'Array 1' }));
ary.push(new Example({ name: 'Array 2' }));
ary.push(new Example({ name: 'Array 3' }));
ary.push(new Example({ name: 'Array 4' }));
Example
  .saveAll(ary)
  .then((objs) => {
    console.log(objs);
  });

ループ処理の注意点

JavaScriptでのネットワーク周りの処理は非同期になるので、 saveAll 全体をPromiseで囲んで処理します。

const saveAll = (ary) => {
  new Promise((res, rej) => {
    
  });
};

そして、その中で一つ一つのオブジェクトを保存する関数を作成します。設定後、最初の呼び出しを行います。二つ目の引数は保存したデータを保存する場所です。最初はデータがないので空の配列を渡します。

const saveAll = (ary) => {
  new Promise((res, rej) => {
    const save = (index, objs) => {
      
    };
    save(0, []);
  });
};

後は保存対象のデータを順番に取り出し、保存処理を実行します。保存処理がうまくいったら、次のデータ(index + 1)を処理します。データがなければPromiseを抜けます。

const saveAll = (ary) => {
  new Promise((res, rej) => {
    const save = (index, objs) => {
      const item = ary[index];
      if (!item) {
        return res(objs);
      };
      item
        .save()
        .then((obj) => {
          objs.push(obj);
          save(index + 1, objs);
        })
        .catch((err) => {
          rej(err);
        });
    };
    save(0, []);
  });
};

このように処理することで、データを一つずつ順番に処理できるようになります。

ncmb-extendのインストール

ncmb-extend は npm コマンドでインストールできます。

$ npm install ncmb-extend

利用する際には require するだけでOKです。

require('ncmb-extend');

最後に

複数のデータを一気に保存したいときにsaveAllメソッドが使えるでしょう。JavaScript SDKを使った開発に役立ててください。

NCMBMania/ncmb-extend

中津川 篤司

中津川 篤司

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