Tôi đang cố tạo một hàm sẽ tạo một điểm đánh dấu mới. Tôi cần để có thể xử lý một số thuộc tính của điểm đánh dấu mới trong cuộc gọi lại. Vấn đề là được tạo ngay lập tức và có thể được sử dụng để gọi hàm gọi lại, nhưng một số thuộc tính chưa có sẵn.Làm cách nào để chờ một đối tượng được tạo không đồng bộ hoàn toàn có sẵn trước khi gọi lại một cuộc gọi lại?
Nếu tôi đợi hai giây trước khi thử truy cập các thuộc tính, nó hoạt động tốt - điều này dẫn tôi tin rằng đối tượng vẫn tạo ra chính nó một cách không đồng bộ sau khi được tạo.
<!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>
Trong ví dụ này gọi lại:
setTimeout(function(){
console.log(marker.Xg.Oa)
}, 2000);
mang lại câu trả lời đúng. Tuy nhiên, cuộc gọi lại không chờ đợi hiển thị lỗi không xác định:
function(marker){
console.log(marker.Xg.Oa);
}
Tôi đang sử dụng thư viện API Javascript của Google Maps ở đây và gây rối với công cụ google.maps không phải là một lựa chọn vì lý do hiển nhiên. Tôi muốn vượt qua toàn bộ đối tượng để gọi lại nhưng tôi cần đảm bảo rằng thông tin latLng (marker.Xg.Oa
) tồn tại trước khi gọi nó. Làm thế nào tôi có thể đảm bảo rằng nó ở đó trước khi gọi lại gọi lại?
Tôi có loại một khó tin này _isn't_ một bản sao, nhưng đối với cuộc sống của tôi, tôi không thể tìm thấy một. – HPierce
Bạn có biết gì về lời hứa không? Sẽ thêm một câu trả lời có thể giúp ... – AdamJeffers
Tôi biết _of_ họ, nhưng theo như tôi biết họ không phải là một phần của vanilla JS (mà sẽ là thích hợp hơn). Tôi mở để sử dụng chúng nếu đó là những gì cần thiết. – HPierce