在Dart中向服务器发出多个独立请求的最佳方法
我希望以最佳方式向同一服务器发出多个请求。所以我有在Dart中向服务器发出多个独立请求的最佳方法,dart,flutter,dart-http,Dart,Flutter,Dart Http,我希望以最佳方式向同一服务器发出多个请求。所以我有 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) {
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;
}
Future getAllItems()异步{
var client=newhttp.client();
列表项SID=['1','2','3'];//不同的ID
列表项列表=[];
用于(项目SID中的var项目){
//调用服务器,例如:“sampleapi/1/next”等
等待client.get('sampleapi/'+item+'/next')。然后((响应){
//进行一些处理并添加到itemList
});
}
client.close();
返回项目列表;
}
现在,api调用一个接一个地进行。但是api调用是相互独立的。实现异步等待地狱的最佳方法是什么?您可以使用
Future.wait(…)
等待一组Future
完成:
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
});
);
}
Future getAllItems()异步{
var client=newhttp.client();
列表项SID=['1','2','3'];//不同的ID
返回未来。等待(['1','2','3'])。映射((项)=>
get('sampleapi/'+item+'/next')。然后((响应){
//进行一些处理并添加到itemList
return foo;//此请求的结果的某些项
});
);
}
另请参见Günter比我快了几分钟,但我已经把它打印出来了,所以这里有一个小的替代方案,它也可以工作,并且完全避免使用“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 getAllItems()异步{
var client=new client();
列表项SID=['1','2','3'];//不同的ID
List List=wait Future.wait(itemsIds.map((itemId)=>client.get('sampleapi/$itemId/next'));
返回list.map((响应){
//在此进行处理并返回项目
返回新项目();
}).toList();
}
我正在使用不同的未来方法对同一服务器进行多次调用,但它返回空的主体id。我确保单个http调用正常工作不确定。也许您希望只有在前一个请求完成后才能发出一个请求。它们是同时发出的。如果一个请求依赖于之前要完成的另一个请求,那么这将不起作用k、 如果你的情况不是这样,我不知道是什么原因造成的。让我试试上面的解决方案,希望它能奏效,谢谢你的帮助reply@GünterZöchbauer可以使用SQLite将这3个API数据存储在本地3个数据库表中?不知道您的意思是什么“这是3个API”,当然,为什么不呢?可以使用SQLite将这3个API数据存储在本地3个数据库表上吗?