Ich hatte ein Problem mit Promise in JavaScript. Was ich versuche zu tun ist, ich habe eine Liste der Adresse, dann für jede Adresse muss ich die Geocode-API aufrufen, um die lat lng zu bekommen, dann werde ich fortfahren, die Marker zusammen mit der Heatmap zu plotten. Hier ist mein Code:JavaScript-Versprechen nicht ausgeführt. Then()
let promiseKey = Promise.all(
result.map()
);
var addedMarkers = promiseKey.then(
markers => Promise.all(
markers.map()
)
)
.then(drawForecastHeatmap);
Der Teil, wo ich die geocode API-Aufruf:
function getBranchLatLng(address, branchName, total, queKey){
return new Promise(function(resolve){
var key = jQuery.rand(geoCodKeys);
var url = 'https://maps.googleapis.com/maps/api/geocode/json?key='+key+'&address='+address+'&sensor=false';
$.ajaxq (qyName, {
url: url,
dataType: 'json'
}).done(function(data) {
var address = getParameterByName('address', this.url);
var index = errorArray.indexOf(address);
try{
var p = data.results[0].geometry.location;
var latlng = new google.maps.LatLng(p.lat, p.lng);
var markerItem =
{
'lat': p.lat,
'lng': p.lng,
'address': address,
'branchName': branchName,
'total': total,
};
console.log(markerItem);
resolve(markerItem);
if (index > -1) {
errorArray.splice(index, 1);
}
}catch(e){
if(data.status = 'ZERO_RESULTS')
return false;
//on error call add marker function for same address and keep in Error ajax queue
getBranchLatLng(address, 'Error');
if (index == -1) {
errorArray.push(address);
}
}
});
//mentain ajax queue set
queuCounter++;
if(queuCounter == setLimit){
queuCounter = 0;
}
});
}
Das Problem ist jetzt, das Programm nur bei getBranchLatLng gestoppt() und nicht einmal gehen in die addForecastMarker() obwohl ich es geschafft habe, etwas vom Geocode auszudrucken. Einige der Adresse
mich Rückkehr:
jquery.min.js:4 GET https://maps.googleapis.com/maps/api/geocode/json?key=&address= 400()
Dann, wenn ich versuche, die Verbindung zu verlängern, erhalte ich diese:
error_message: "Invalid request. Missing the 'address', 'bounds', 'components', 'latlng' or 'place_id' parameter."
results :[]
status: "INVALID_REQUEST"
Irgendwelche Ideen auf, wie man diese Adresse mit ‚INVALID_REQUEST lösen zurück zum Promise-Elternteil?
Danke!
Verwenden Sie nicht in Ihrem getBranchLatLng mybe Sie erhalten einen Fehler und das ist, warum das Versprechen stoppt –
@AmitWagner Sie meinen, nehmen Sie den Catch(), dass Brocken? – hyperfkcb
Ich meine in Ihrer Ajax-Funktion gibt es möglicherweise einen Fehler. versuchen Sie immer zu lösen, um zu sehen, ob Sie fortfahren oder verwenden Sie ablehnen und behandeln den Fehler in der Versprechenskette –