C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
gOry
Inlägg: 5066 Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:
Inlägg
av gOry » 2 mars 2015, 03:35:28
Hur kan jag returnera värdena i duration och distance utan att få "duration is not defined"
Är rätt ny på att programmera Java känns som jag har provat det mesta var utan var och definierat på olika ställen utanför dom båda functionera.. börjar bli lite smått tokig nu!
Kod: Markera allt
function calcDirectRoute(start,end){
var request = {
origin: addressArray[start][2],
destination: endArray[end],
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request,
function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
var route = response.routes[0];
var sumPanel = document.getElementById('displayDiv');
sumPanel.innerHTML = '';
sumPanel.innerHTML += 'Start: ' + route.legs[0].start_address;
sumPanel.innerHTML += '<br>Stop: ' + route.legs[0].end_address;
sumPanel.innerHTML += '<br>Tid i min: ' + round(route.legs[0].duration.value/60,0);
sumPanel.innerHTML += '<br>Sträcka i km: '+ round(route.legs[0].distance.value/1000,1);
var duration = round(route.legs[0].duration.value/60,0);
var distance = round(route.legs[0].distance.value/1000,1);
}
});
return {
duration: duration,
distance: distance
};
}
pbgp
Inlägg: 1450 Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala
Inlägg
av pbgp » 2 mars 2015, 07:42:56
Det ser inte ett dugg ut som Java. Är det ECMAscript?
pbgp
Inlägg: 1450 Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala
Inlägg
av pbgp » 2 mars 2015, 07:47:27
Jag är inte så haj på javascript, men får man ha en variabel som heter samma som en class/typ?
Prova
Senast redigerad av
pbgp 2 mars 2015, 07:48:24, redigerad totalt 1 gång.
johano
Inlägg: 1943 Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm
Inlägg
av johano » 2 mars 2015, 07:49:04
Jodå det får man.
Problemet här är att variablerna distance och duration endast deklareras i den innersta "anonyma" funktionen men refereras till utanför den, och är är de såklart "undefined".
/johan
gOry
Inlägg: 5066 Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:
Inlägg
av gOry » 2 mars 2015, 12:15:43
johano: ja precis men jag vet inte riktigt vart jag ska deklarera dom!
Jag kan deklarera dom utanför båda funktionerna men då blir som helt globala och det vill jag inte!
johano
Inlägg: 1943 Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm
Inlägg
av johano » 2 mars 2015, 12:32:07
Deklarera dem i calcDirectRoute() innan anropet till directionsService.route():
Kod: Markera allt
function calcDirectRoute(start,end){
var request = {
origin: addressArray[start][2],
destination: endArray[end],
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
var direction;
var duration;
directionsService.route(request,
function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
var route = response.routes[0];
var sumPanel = document.getElementById('displayDiv');
sumPanel.innerHTML = '';
sumPanel.innerHTML += 'Start: ' + route.legs[0].start_address;
sumPanel.innerHTML += '<br>Stop: ' + route.legs[0].end_address;
sumPanel.innerHTML += '<br>Tid i min: ' + round(route.legs[0].duration.value/60,0);
sumPanel.innerHTML += '<br>Sträcka i km: '+ round(route.legs[0].distance.value/1000,1);
duration = round(route.legs[0].duration.value/60,0);
distance = round(route.legs[0].distance.value/1000,1);
}
});
return {
duration: duration,
distance: distance
};
}
/johan
gOry
Inlägg: 5066 Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:
Inlägg
av gOry » 2 mars 2015, 13:39:03
Det har jag testat, men dom får aldrig sett värde.
Är det för att de är tydligare en funktion i directionsService.route()??
Så här anropar jag funktionen dvs från en annan funktion
Kod: Markera allt
function run(callback){
var codes = calcDirectRoute(4,0);
var ab = codes.duration;
var ba = codes.distance;
console.log(ab);
console.log(ba);
}
pbgp
Inlägg: 1450 Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala
Inlägg
av pbgp » 2 mars 2015, 15:25:06
Vet du säkert att din anonyma funktion anropas?
gOry
Inlägg: 5066 Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:
Inlägg
av gOry » 2 mars 2015, 16:13:54
Jag får ett resultat som visas i "displayDiv"
Men jag tror jag får göra på ett annat sätt....
Varför gör jag det här överhuvudtaget.. detta kommer ersätta mitt jobb..
johano
Inlägg: 1943 Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm
Inlägg
av johano » 2 mars 2015, 16:20:55
gOry skrev: Det har jag testat, men dom får aldrig sett värde.
Är det för att de är tydligare en funktion i directionsService.route()??
Borde absolut funka.
Tänk på att INTE ha med 'var'-deklarationen inne i den anonyma
funktionen, då deklareras en ny variabel (med samma namn) som bara
har scope inne i funktionen...
/johan
johano
Inlägg: 1943 Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm
Inlägg
av johano » 2 mars 2015, 16:32:00
Jag förenklade ditt script något så det går att testa fristående:
Kod: Markera allt
var directionsService = {
route: function(r,m) { m(); }
};
function calcDirectRoute(start,end){
var request = {
};
var direction;
var duration;
directionsService.route(request,
function(response, status) {
if (1+1==2) {
duration = 110;
distance = 120;
}
});
return {
duration: duration,
distance: distance
};
}
var result = calcDirectRoute(10,20);
alert(result.duration+","+result.distance);
Och, det funkar alldeles utmärkt...
/johan
gOry
Inlägg: 5066 Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:
Inlägg
av gOry » 2 mars 2015, 17:53:32
det jag har som problem nu är att
calcDirectRoute funktionen blir klar innan directionsService.route
johano
Inlägg: 1943 Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm
Inlägg
av johano » 2 mars 2015, 18:47:20
Isåfall får du skicka med ett callbackargument till calcDirectRoute() och sedanistället för att returnera värdena anropar
du callbackmetoden med resultatet.
/johan
johano
Inlägg: 1943 Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm
Inlägg
av johano » 2 mars 2015, 18:54:29
Typ såhär:
Kod: Markera allt
var directionsService = {
route: function(r,m) { m(); }
};
function calcDirectRoute(start,end, callback){
var request = {
};
var direction;
var duration;
directionsService.route(request,
function(response, status) {
if (1+1==2) {
duration = 110;
distance = 120;
callback({
duration: duration,
distance: distance
});
}
});
}
calcDirectRoute(10,20, function(result) {
alert(result.duration+","+result.distance);
});
gOry
Inlägg: 5066 Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:
Inlägg
av gOry » 2 mars 2015, 22:48:37
tack, callbacken funka kalas!
Men hur gör jag nu ifall jag vill loopa den här funktionen igenom en Array, det som händer är att loopen blir klar innan funktionera...