Похоже, я решил эту проблему с помощью счетчика в forEach (как там сказано: Обратный вызов после завершения всех асинхронных обратных вызовов forEach ) и вот код:
Directly accessing Street View data
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
Contents of the file:
gid, lat_from, lon_from
> function readSingleFile (e) {var file = e.target.files [0];if (! file) {return;} var reader = new FileReader ();reader.onload = function (e) {var contents = e.target.result;processFile (content, returnFile)};reader.readAsText (файл);} result = "";function processFile (contents, callback) {var text = content var splitted = text.split ('\ r \ n') $ (".container") .append ("splitted length:" + splitted.length + "
«);var itemsProcessed = 0;splitted.forEach (function (point) {var gid = point.split (';') [0] var latilong = point.split (';') [1] .replace (/ [\] / g, '')var splitted2 = latilong.split (':') var lat = splitted2 [1] .split (',') [0] var lon = splitted2 [2] .split ('}') [0] var latilong = новый Google.maps.LatLng (lat, lon); // alert (latilong) var radius = 20 var streetViewService = new google.maps.StreetViewService (); streetViewService.getPanoramaByLocation (latilong, radius, function (data, status) {itemsProcessed ++; если(status == google.maps.StreetViewStatus.OK) {var nearStreetViewLocation = data.location.latLng; // alert (nearStreetViewLocation) // $ (".container") .append ("
" + gid + ','+ JSON.stringify (nearStreetViewLocation) .replace (/ [\ "\} \ {lat long \:] / g,' ') +"
"); // console.log (gid +', '+JSON.stringify (nearStreetViewLocation) .replace (/ [\ "\} \ {lat long \:] / g, '')) result = result + gid + ',' + JSON.stringify (nearStreetViewLocation) .replace (/ [\ "\} \ {lat long \:] / g, '') + '
'; $ (" .container ") .appeй (результат);$ (".container") .append ('«);$ (".container") .append ("обработано элементов:" + itemsProcessed);if (itemsProcessed === splitted.length) {обратный вызов (результат);}} else {$ (".container") .append ("
" + gid + ', 0' + "
");}});});// if (callback) {// callback (result);//}} function returnFile (results) {if (results) {alert ('results not null');$ (".container") .append ('из функции обратного вызова: ');$ (".container") .append (результаты);} else {alert ('results is null');}} document.getElementById ('file-input') .addEventListener ('change', readSingleFile, false);// points5 = [{lat: 52.2254802729, lng: 21.0105694375}, // {lat: 52.2254556313, lng: 21.0104179005}, // {lat: 52.2245593608, lng: 21.0063570311}, // {lat: 52.2245355399, lng: 21.0062524, // {lat: 52.2245125335, lng: 21.0061437961}];// // points5.forEach (function (point) {// // $ (".container") .append ("
" + JSON.stringify (point, null) .replace (/ \ "/ g,'') + "
"); // //}); // var radius = 20 // var streetViewService = new google.maps.StreetViewService (); // points5.forEach (function (point) {// streetViewService.getPanoramaByLocation (точка, радиус, функция (данные, статус) // {// if (status == google.maps.StreetViewStatus.OK) // {// var nearStreetViewLocation = data.location.latLng; // alert(nearStreetViewLocation) // $ (".container") .append ("
" + JSON.stringify (nearStreetViewLocation) .replace (/ [\ "\} \ {lat long \:] / g, '') +"
"); // return nearStreetViewLocation //} // else {// alert ("error") //} //}); //});