見出し画像

取得したオブジェクトのとあるプロパティが存在する時だけループする処理

あるサービスのAPIからデータを取得しようとしてハマったポイントです。

1. 関数AでAPIからあるレコードをオブジェクトで取得します。この時、レコードは1つしかAPIの制限で取得できません。指定したパラメータで複数レコードがある場合は、nextというプロパティが存在します。

2. 取得したオブジェクトからfunctionB(obj)で必要なデータを取り出します。

3. nextのプロパティが存在する場合は1.の関数Aの処理に戻り、パラメータにnextの値を渡して次のレコードのオブジェクトを取得します。

この1-3をぐるぐる回すループ処理のロジックが思いつかないで、悩んでました。

● ループを続ける条件は、object.nextの値が存在すること。 
● ループを終了する条件は、object自体が空か、object.nextの値が存在しないこと。

今回はGASで悩んでおりましたが、結局こういうコードを書きました。

  const param = {APIからデータ取得のためのパラメータ};
  let next = '';
  while (true) {
   const obj = functionA(param, next);
   if (obj.next) {
     next = obj.next;
     functionB(obj);
   } else if (obj.data) {
     functionB(obj)
     console.log('データ取得は終了しました。');
     break;
   } else {
     console.log('データ取得は終了しました。');
     break;
   }
 }

while (true) {} で無限ループを作り、ループ内のif文で条件分岐しています。

1. obj.nextの値が存在するか判定 > データ取り出し処理 > ループを続ける
2. obj.dataの値が存在するか判定 > データ取り出し処理 > breakでループを終了
3. 1&2以外 = objが空 > breakでループを終了

思いつくまでだいぶ時間がかかりました。

ノンプロ研でプログラミングの勉強中です。


いいなと思ったら応援しよう!