Optimal way to make multiple independent requests to server in Dart

Issue

I want to make to multiple requests to same server in an optimal way. So I have

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;
}

Now, the api calls are made one after other. But the api calls are independent of each other. Whats the best way to implement so as to avoid the async await hell?

Solution

You can use Future.wait(...) to wait for a set of Futures to complete:

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 
      });
    );
}

See also https://api.dartlang.org/stable/1.24.3/dart-async/Future/wait.html

Answered By – Günter Zöchbauer

Answer Checked By – Pedro (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *