[英]javascript - wait for loop to finish first
I want to finish first all results before going to another loops. 我想先完成所有结果,然后再进行另一个循环。 How can I manage to achieve that? 我该如何实现呢?
function callback_Original(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker_Original(results[i]);
}
}
}
It always gives few places sometimes. 有时总是很少有地方。
function createMarker_Original(place) {
var photos = place.photos;
if (!photos) {
return;
}
var placeLoc = place.geometry.location;
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent('<div style="float:left"><img src="' + photos[0].getUrl({'maxWidth': 120, 'maxHeight': 120})
+ '"></div><div style="float:right; padding: 10px;"><b>Name: </b>'+ place.name +'<br/>'+
'<b>Coordinates : </b>'+ place.geometry.location +'<br/>'+
'<b>Type: </b>'+ type +'<br/>');
infowindow.open(map, this);
});
}
What about using Promise?(ES6 Code) 如何使用Promise?(ES6代码)
function callback_Original(results, status) {
return new Promise((resolve, reject) => {
if (status === google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker_Original(results[i]);
}
resolve();
}else
reject("Places service error");
});
}
And then just use 然后就用
callback_Original(a,b)
.then(response => {
// Loop finished, what to do nexT?
})
.catch(error => {
// Error
console.log(error);
});
use async
, it'll wait for promise
. 使用async
,它会等待promise
。 Reference 参考
function callback_Original_child(results, status) {
return new Promise(resolve => {
if (status === google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker_Original(results[i]);
}
}
});
}
async function callback_Original(results, status) {
try {
await callback_Original_child(results, status);
} catch (error) {
console.log(error);
}
}
callback_Original()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.