Googlemap(v3)にマーカーを追加し、マーカーを追加した場所に関連する結果を持つオブジェクトを返す関数があります。この関数から返された成功値に基づいて、いくつかのロジックを記述する必要があります。しかし、geocoder.geocode は非同期的に実行されるため、結果が false として返され、ロジックが失敗します。同期的に行う方法はありますか?これが私のコードです:
addMarkerAtGMap = function (positionParam, gMapObject, colorMarkerObj) {
if (infoGMapMarkerWin !== undefined && infoGMapMarkerWin.open !== undefined) {
infoGMapMarkerWin.close();
}
// Set the success as false by default..here due to async call the success value is incorrectly returned as false
returnGMapObject = { success: false, latitude: "0", longitude: "0", gMapObject: gMapObject };
geocoder.geocode({ 'address': positionParam }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
gMapObject = new google.maps.Marker({
icon: colorMarkerObj.markerImage,
shadow: colorMarkerObj.markerShadow,
position: results[0].geometry.location
});
gMapObject.setMap(map);
google.maps.event.addListener(gMapObject, "click", function (event) {
if (infoGMapMarkerWin !== undefined && infoGMapMarkerWin.open !== undefined) {
infoGMapMarkerWin.close();
}
infoGMapMarkerWin = new google.maps.InfoWindow(
{ content: positionParam,
size: new google.maps.Size(100, 100),
position: gMapObject.position
});
infoGMapMarkerWin.open(map);
});
returnGMapObject = { success: true, latitude: results[0].geometry.location.Xa, longitude: results[0].geometry.location.Ya, gMapObject: gMapObject };
}
});
return returnGMapObject;
}
$("#btnAddLocation").click(function () {
if (!PLVM.isValid()) {
showMessage(PLVM.errors());
}
else {
var address = $("#Addressline1").val();
var colorMarkerObj = $Utils.colorMapMarker("FF8277"); // Add color to marker
var gMapObject = $Utils.addMarkerAtGMap(address, locMarkerObj, colorMarkerObj);
if (gMapObject.success == true) {
// gMapObject.success returned as false due to asynchronous call which fails my logic
if (PLVM.Latitude() == gMapObject.latitude && PLVM.Longitude() == gMapObject.longitude) {
locMarkerObj.setMap(null);
}
else {
PLVM.Latitude(gMapObject.latitude);
PLVM.Longitude(gMapObject.longitude);
PartnerDetailsVM.addPL(PLVM);
}
}
}
return false;});