Sto provando a creare una funzione che creerà un nuovo marker. Devo essere in grado di elaborare alcune delle proprietà del nuovo marcatore nel callback. Il problema è che viene creato immediatamente e può essere utilizzato per richiamare la richiamata, ma alcune proprietà non sono ancora disponibili.Come posso aspettare che un oggetto creato in modo asincrono sia completamente disponibile prima di richiamare un callback?
Se attendo due secondi prima di provare ad accedere alle proprietà, funziona perfettamente - questo mi porta a credere che l'oggetto sia ancora in grado di generare se stesso dopo essere stato creato in modo asincrono.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Simple markers</title>
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
function initMap() {
var latLng = new google.maps.LatLng(-25.363, 131.044);
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: latLng
});
function placeMarker(map, latLng, callback, callback2){
var marker = new google.maps.Marker({
position: latLng,
map: map });
callback(marker);
callback2(marker);
}
placeMarker(map, latLng, function(marker){
setTimeout(function(){
console.log(marker.Xg.Oa)
}, 2000);
}, function(marker){
console.log(marker.Xg.Oa);
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?signed_in=true&callback=initMap"></script>
</body>
</html>
In questo esempio la richiamata:
setTimeout(function(){
console.log(marker.Xg.Oa)
}, 2000);
cede la risposta corretta. Ma il callback che non aspetta mostra un errore non definito:
function(marker){
console.log(marker.Xg.Oa);
}
sto usando un libreria API di Google Maps Javascript qui, e scherzi con la roba google.maps non è un'opzione per ovvie ragioni. Voglio passare l'intero oggetto al callback, ma devo assicurarmi che le informazioni di latLng (marker.Xg.Oa
) esistano prima di invocarlo. Come posso assicurarmi che sia lì prima di richiamare la richiamata?
ho una specie di difficile credere questo _isn't_ un duplicato, ma per la vita di me non riuscivo a trovare uno. – HPierce
Sai qualcosa delle promesse? Aggiungerò una risposta che potrebbe aiutare ... – AdamJeffers
Conosco loro, ma per quanto ne so non fanno parte di vanilla JS (che sarebbe preferibile). Sono aperto a usarli se questo è ciò che è necessario. – HPierce