GETで複数レコード取得しループさせ、
その中で条件に合った1件をキーとして、別アプリの項目を取得するという処理をしようとしております。
下記のようにfor文の途中で条件に合致したレコードを見つけたら、for文を抜けたいのですが、
for文は全て実行され、GET②では複数レコード取得できてしまっております。
for文では条件合致次第、returnだったりループするMAX件数を入れたりしたのですが、できず。。
最近同期/非同期処理を知ったばかりで、promiseを使えばよいのだと思うのですが、
どこに使えばよいか分からなくなり投稿させていただきました。
GET①{ //複数レコード取得
for{ //①のレコードを1件ずつ回し、②で別アプリの情報をGET
GET②{
//ここで条件に合致した最初の1件を取得しfor文を抜けたい
}
}
}
どうぞよろしくお願いいたします。
GET①{ //複数レコード取得
for{ //①のレコードを1件ずつ回し、②で別アプリの情報をGET
GET②{
//ここで条件に合致した最初の1件を取得しfor文を抜けたい
}
}
}
ちょっとこれでは回答がしづらいなぁーと思いました。
実際に書かれたコードを貼り付けていただいた方が回答しやすかなーと。
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 が出力
もし不明な点がありましたら、気兼ねなくご質問ください。その際はコードの一部分でも記載いただければ幸いです。
system
(system)
Closed
4
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。