取得したオブジェクトのとあるプロパティが存在する時だけループする処理
あるサービスの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でループを終了
思いつくまでだいぶ時間がかかりました。
ノンプロ研でプログラミングの勉強中です。