新規投稿
フォローする

GET処理内でループ、条件に合致次第ループを抜けたい

GETで複数レコード取得しループさせ、

その中で条件に合った1件をキーとして、別アプリの項目を取得するという処理をしようとしております。

下記のようにfor文の途中で条件に合致したレコードを見つけたら、for文を抜けたいのですが、

for文は全て実行され、GET②では複数レコード取得できてしまっております。

for文では条件合致次第、returnだったりループするMAX件数を入れたりしたのですが、できず。。

最近同期/非同期処理を知ったばかりで、promiseを使えばよいのだと思うのですが、

どこに使えばよいか分からなくなり投稿させていただきました。

 GET①{ //複数レコード取得
  for{ //①のレコードを1件ずつ回し、②で別アプリの情報をGET
   GET②{
     //ここで条件に合致した最初の1件を取得しfor文を抜けたい
   }
  }
 }

どうぞよろしくお願いいたします。

 

0

2件のコメント

Avatar
細谷 崇
 GET①{ //複数レコード取得
  for{ //①のレコードを1件ずつ回し、②で別アプリの情報をGET
   GET②{
     //ここで条件に合致した最初の1件を取得しfor文を抜けたい
   }
  }
 }

ちょっとこれでは回答がしづらいなぁーと思いました。
実際に書かれたコードを貼り付けていただいた方が回答しやすかなーと。

0
Avatar
川村

matsu さん

おそらく Promise then を使って実装されているのかと思いますが、async await を使用するとご質問のフローに近い直感的な記述ができます。

ループの抜け方はラベルを使う方法もありますが、関数にして return するのが手っ取り早いと思います。

以下サンプルです。これを Promise then を使った書き方にすると2倍くらいの記述量になり、3倍くらい難解なコードになります。

async function main() {
  /* GET①{ //複数レコード取得 */
  const recordList1 = (await kintone.api('/k/v1/records', 'GET', { app: 1 })).records;

  /* for{ //①のレコードを1件ずつ回し、②で別アプリの情報をGET */
  for (const record1 of recordList1) {
    /* GET②{ */
    const recordList2 = (await kintone.api('/k/v1/records', 'GET', { app: 2 })).records;

    for (const record2 of recordList2) {
      if (record2.x.value === 'x') {
        /* //ここで条件に合致した最初の1件を取得しfor文を抜けたい */
        return record2;
      }
    }
  }
}

main().then(console.log) // 条件に一致すれば record2 が出力

もし不明な点がありましたら、気兼ねなくご質問ください。その際はコードの一部分でも記載いただければ幸いです。

0
サインインしてコメントを残してください。