gpt4 book ai didi

flutter - 如何在循环中进行 http 调用以在 dart flutter 中同步?

转载 作者:行者123 更新时间:2023-12-03 04:27:32 28 4
gpt4 key购买 nike

如何使整个 foreach 循环同步?我无法移除“异步”,因为在循环中调用了 http。

所以有 2 组 http 调用,第一个 http 调用获取主要数据,然后我在主要数据列表中循环获取 venues_venue字段的 id 调用另一个 api 来获取子数据,我试图从子数据中推送 ['title']['rendered']回到主数据列表

现在的问题是,由于 foreach 循环是异步的,最终列表不包括 ['title']['rendered'] field

List userArtworkVenuesList;
Future<String> _getUserArtworkWishList() async{

//first http data retrieved
var responseArtworksInWishList = await http.get(Uri.encodeFull(artworksApiBase+getArtworksApi));
var convertedData = json.decode(responseArtworksInWishList.body);

userArtworkVenuesList = convertedData;

looping the above retrieved list to get the id of an item to call another http, then the retrieved item's data is appended to the parent's list
countTheLoop = 0;
convertedData.asMap().forEach((index,item) async{

//print(item['custom_post_custom_fields']['venues_venue'][0]);

var venueResponse = await http.get(Uri.encodeFull(specificVenueBase+item['custom_post_custom_fields']['venues_venue'][0]));
var venueData = json.decode(venueResponse.body);

// print(venueData);
print('the index');
print(index);
print('the name of the venue is ');
print(venueData[0]['title']['rendered']);


convertedData[index]['venue_name'] = venueData[0]['title']['rendered'];


countTheLoop++;



});


userArtworksList = convertedData; //this is where the problem is
print(userArtworksList); //doesn't have the `venue_name` I see in the console the data is still being loaded

}

只是想知道我是否可以强制 foreach 循环同步?

最佳答案

您可以使用旧式 for 循环

请比较:


import 'dart:async';

Future updateMap(map, k, v) {
return new Future.delayed(const Duration(seconds: 2), () {
map[k] = v +1;
});
}


void asyncForEach() {
var map = {'a':1, 'b':2};
map.forEach((k,v) async {
await updateMap(map, k, v);
});
print(map);
}

Future asyncFor() async {
var map = {'a':1, 'b':2};
for (var mapEntry in map.entries) {
await updateMap(map, mapEntry.key, mapEntry.value);
};
print(map);
}

void main() async {
asyncForEach();
await asyncFor();
}


输出
{a: 1, b: 2}  //Immediately
{a: 2, b: 3} //After 4 seconds

请注意,在第二个版本中,每次迭代都是按顺序执行的,这可能是也可能不是您想要的。
您可能更喜欢启动所有任务,收集 future ,然后使用 Future.wait等待 future 列表。

关于flutter - 如何在循环中进行 http 调用以在 dart flutter 中同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58534740/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com