Fråga ang Java och function

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
gOry
Inlägg: 5066
Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:

Fråga ang Java och function

Inlägg av gOry »

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
		};
	}
Användarvisningsbild
pbgp
Inlägg: 1450
Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala

Re: Fråga ang Java och function

Inlägg av pbgp »

Det ser inte ett dugg ut som Java. Är det ECMAscript?
Användarvisningsbild
pbgp
Inlägg: 1450
Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala

Re: Fråga ang Java och function

Inlägg av pbgp »

Jag är inte så haj på javascript, men får man ha en variabel som heter samma som en class/typ?

Prova

Kod: Markera allt

return { duration: du, distance di }
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

Re: Fråga ang Java och function

Inlägg av johano »

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
Användarvisningsbild
gOry
Inlägg: 5066
Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:

Re: Fråga ang Java och function

Inlägg av gOry »

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

Re: Fråga ang Java och function

Inlägg av johano »

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
Användarvisningsbild
gOry
Inlägg: 5066
Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:

Re: Fråga ang Java och function

Inlägg av gOry »

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);
}
Användarvisningsbild
pbgp
Inlägg: 1450
Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala

Re: Fråga ang Java och function

Inlägg av pbgp »

Vet du säkert att din anonyma funktion anropas?
Användarvisningsbild
gOry
Inlägg: 5066
Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:

Re: Fråga ang Java och function

Inlägg av gOry »

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.. :humm: :wink:
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Fråga ang Java och function

Inlägg av johano »

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

Re: Fråga ang Java och function

Inlägg av johano »

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
Användarvisningsbild
gOry
Inlägg: 5066
Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:

Re: Fråga ang Java och function

Inlägg av gOry »

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

Re: Fråga ang Java och function

Inlägg av johano »

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

Re: Fråga ang Java och function

Inlägg av johano »

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);
   });
Användarvisningsbild
gOry
Inlägg: 5066
Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:

Re: Fråga ang Java och function

Inlägg av gOry »

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... :humm:
Skriv svar