同じサーバーに対して最適な方法で複数のリクエストを行いたい。ので、私は持っています
Future<List<Item>> getAllItems() async {
var client = new http.Client();
List<String> itemsIds = ['1', '2', '3']; //different ids
List<Item> itemList = [];
for (var item in itemsIds) {
//make call to server eg: 'sampleapi/1/next' etc
await client.get('sampleapi/' + item + '/next').then((response) {
//Do some processing and add to itemList
});
}
client.close();
return itemList;
}
これで、API呼び出しが次々に行われます。ただし、API呼び出しは互いに独立しています。 async await hellを回避するために実装する最良の方法は何ですか?
ギュンターは数分で私を打ち負かしましたが、私はすでにそれを入力しているので、これも機能し、「then」を完全に使用しないようにするわずかな代替手段です。
Future<List<Item>> getAllItems() async {
var client = new Client();
List<String> itemsIds = ['1', '2', '3']; //different ids
List<Response> list = await Future.wait(itemsIds.map((itemId) => client.get('sampleapi/$itemId/next')));
return list.map((response){
// do processing here and return items
return new Item();
}).toList();
}
Future.wait(...)
を使用して、一連のFuture
sが完了するのを待つことができます。
Future<List<Item>> getAllItems() async {
var client = new http.Client();
List<String> itemsIds = ['1', '2', '3']; //different ids
return Future.wait<Item>(['1', '2', '3'].map((item) =>
client.get('sampleapi/' + item + '/next').then((response) {
//Do some processing and add to itemList
return foo; // some Item that is the result of this request
});
);
}
参照 https://api.dartlang.org/stable/1.24.3/Dart-async/Future/wait.html