首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Dart中向服务器发出多个独立请求的最佳方式

在Dart中向服务器发出多个独立请求的最佳方式
EN

Stack Overflow用户
提问于 2018-04-25 16:57:58
回答 2查看 12.6K关注 0票数 12

我想以最优的方式向同一服务器发出多个请求。所以我有

代码语言:javascript
运行
AI代码解释
复制
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调用是相互独立的。为了避免等待地狱的异步,最好的实现方式是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-25 17:22:57

您可以使用Future.wait(...)等待一组Future完成:

代码语言:javascript
运行
AI代码解释
复制
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

票数 19
EN

Stack Overflow用户

发布于 2018-04-25 17:31:44

Günter比我早了几分钟,但我已经把它打出来了,所以这里有一个轻微的替代方案,它也可以工作,并完全避免使用'then‘。

代码语言:javascript
运行
AI代码解释
复制
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();
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50027632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档