Ich mag würde die Google Maps Geocoding API mit einem Versprechen wie diese nennen:einen Wert von einem Versprechen Rückkehr
function makeGeoCodingRequest(address,bounds)
{
/*
Input parameters:
address:a string
bounds: an object of class google.maps.LatLngBounds(southWest,northEast)
This will return a set of locations from the google geocoding library for the given query
*/
var url="https://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&key=AIzaSyD9GBloPC20X-1kWRo7sm_0z5xvCiaSd3c";
var promise,response;
var messages={
"ZERO_RESULTS":"No results were found",
"OVER_QUERY_LIMIT":"We are over the query limit.Wait awhile before making a request",
"REQUEST_DENIED":"Request was denied,probably using a bad or expired API Key",
"INVALID_REQUEST":"Request was sent without the required address,component or component",
"UNKNOWN_ERROR": "There was an error somewhere on Google's servers"
};
if(address)
promise=Q($.ajax({
type: "GET",
url: "https://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&key=API_KEY"
}));
return promise.then(function(data) {
if (data.status === "OK") return data;
else console.error(messages[data.status]);
return null;
});
}
Wenn ich die Funktion makeGeoCodingRequest
Anfrage nennen, finde ich, dass ich ein Versprechen statt eines erhalten Wert:
var geo=makeGeoCodingRequest(address);
console.log(Q.isPromise(geo));//returns true
Warum nicht versprechen.dann ausgeführt, bevor der Wert zurückgegeben wurde? Wie kann ich einen Wert aus diesem Versprechen anstelle eines anderen versprechen?
Wenn ich stattdessen entscheide, 'promise.then (...)' und 'return promise' zu verwenden und dann' makeGeoCodingRequest (adresse, bounds) .then (...) ', wäre es dann immer noch dasselbe? – vamsiampolu
Ja, das Versprechen, das von 'makeGeoCodingRequest' zurückgegeben wird, hat denselben Wert des Rückgabewerts in Ihrem 'promise.then'-Handler. Sie können ablehnen, indem Sie etwas wie 'Q.reject (neuer Fehler (" HTTP-Anforderung fehlgeschlagen "+ data.status)) zurückschicken.' –
Danke für die Antwort, alles funktioniert, einschließlich Q.reject. – vamsiampolu