以下のようなAPIがあると仮定します。
- データベースに1000種類のデータがあり、インデックスはそれぞれ1〜1000です。
- 次のようなgetリクエストを送ることでjsonファイルを取得することができます。
https://example.test/getJson?beginIndex=400&endIndex=500
この場合、インデックス400〜500のデータが格納されたjsonファイルを受け取ることになります。
- しかし、一度に指定できるデータの数は100種類のみとします。
そのため、100〜500などのリクエストはエラーが返ってきます。
以上のAPIを使い、1〜1000のデータをすべて取得したいとき、fetchを使ってどのように書けばよいでしょうか。
async/await(非同期処理)について理解が浅いため、以下のようにコードを書いてみたのですが思ったとおりの動作をしてくれません。(分かる人が見れば当然なのかもしれませんが...)
JavaScript
1const URL = "https://example.test/getJson?"; 2 3for(i = 1; i < 1000; i+=100){ 4 fetch(URL + "beginIndex=" + i + "&endIndex=" + (i+99)) 5 .then(response => response.json()) 6 .then(function(json){ 7 console.log(json); 8 }) 9 .catch(error => { 10 console.log(error); 11 }); 12}
1〜1000を100ずつ10回取得することで実装しようと考えておりますが、具体的にどうすれば思ったとおりの動作をしてくれるかご教授いただけたらと思います。
追記:
7行目のconsole.logの結果を見ると、undefined を出力していました。
おそらくresponseを待たずに次のループに入っているからだと思うのですが、具体的な解決策が分かりません。
期待する動作は、
1-100でリクエストを送信→レスポンスを受け取り後、次は101-200でリクエストを送信...
これを901-1000まで繰り返したいです。
送信→受け取り→次のループ処理→送信... とするためには、安直にループで囲むだけでは難しいでしょうか。