Firebase 如何减少颤振中for循环的时间?
我有一个名为getNearByPlaces()的方法,然后我有一个for循环,循环遍历每个place_id,并向google API发送请求,以获取place_id的名称, 所以这个操作大约需要15秒,我怎样才能让它更快呢Firebase 如何减少颤振中for循环的时间?,firebase,flutter,dart,asynchronous,google-cloud-firestore,Firebase,Flutter,Dart,Asynchronous,Google Cloud Firestore,我有一个名为getNearByPlaces()的方法,然后我有一个for循环,循环遍历每个place_id,并向google API发送请求,以获取place_id的名称, 所以这个操作大约需要15秒,我怎样才能让它更快呢 Future<void> getNearByPlaces(double latitude, double longitude) async { List results = []; List placesId = []; List near
Future<void> getNearByPlaces(double latitude, double longitude) async {
List results = [];
List placesId = [];
List nearbyPlaces = [];
String nearbyUrl =
"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${latitude},${longitude}&radius=500&key=${mapKey}";
var nearbyResponse =
await RequestAssistant.getRequest(Uri.parse(nearbyUrl));
if (nearbyResponse == "Failed.") {
return;
}
results = nearbyResponse["results"];
for (int i = 0; i < results.length; i++) {
placesId.add(results[i]['place_id']);
String placeDetailsUrl =
"https://maps.googleapis.com/maps/api/place/details/json?place_id=${results[i]['place_id']}&key=$mapKey";
var response =
await RequestAssistant.getRequest(Uri.parse(placeDetailsUrl));
if (response == "Failed.") {
return;
}
if (response["status"] == "OK") {
await nearbyPlaces.add(response["result"]["name"]);
}
}
print(nearbyPlaces);
await FirebaseFirestore.instance
.collection("nearbyPlaces")
.doc(uid)
.set({'nearbyPlaces': nearbyPlaces});
}
Future getNearByPlaces(双纬度、双经度)异步{
列出结果=[];
列表placesId=[];
列出邻近位置=[];
字符串nearbyUrl=
"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${纬度},${经度}&半径=500&key=${mapKey}”;
var nearbyResponse=
wait RequestAssistant.getRequest(Uri.parse(nearbyUrl));
if(nearbyResponse==“失败”){
返回;
}
结果=接近响应[“结果”];
for(int i=0;i
如果只在详细结果中使用名称,则无需通过“地点id”再次查询,因为我发现“nearbysearch”API结果中有更多信息。例如,图标、姓名、照片等,如下所示 所以您只需迭代“nearbysearch”结果并生成“nearbyPlaces”数据。
...
results = nearbyResponse["results"];
for (int i = 0; i < results.length; i++) {
placesId.add(results[i]['place_id']);
nearbyPlaces.add(results[i]['name');
}
print(nearbyPlaces);
...
。。。
结果=接近响应[“结果”];
for(int i=0;i
如果每个循环迭代是独立的(即不依赖于以前迭代的结果),而不是等待每次迭代完成后再开始下一次迭代,您可以在列表中收集所有未来
并使用未来。等待
。请参阅。非常感谢!您救了我的命!现在只需1秒
...
results = nearbyResponse["results"];
for (int i = 0; i < results.length; i++) {
placesId.add(results[i]['place_id']);
nearbyPlaces.add(results[i]['name');
}
print(nearbyPlaces);
...