Sida 1 av 2

Fråga ang Java och function

Postat: 2 mars 2015, 03:35:28
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
		};
	}

Re: Fråga ang Java och function

Postat: 2 mars 2015, 07:42:56
av pbgp
Det ser inte ett dugg ut som Java. Är det ECMAscript?

Re: Fråga ang Java och function

Postat: 2 mars 2015, 07:47:27
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 }

Re: Fråga ang Java och function

Postat: 2 mars 2015, 07:49:04
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

Re: Fråga ang Java och function

Postat: 2 mars 2015, 12:15:43
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!

Re: Fråga ang Java och function

Postat: 2 mars 2015, 12:32:07
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

Re: Fråga ang Java och function

Postat: 2 mars 2015, 13:39:03
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);
}

Re: Fråga ang Java och function

Postat: 2 mars 2015, 15:25:06
av pbgp
Vet du säkert att din anonyma funktion anropas?

Re: Fråga ang Java och function

Postat: 2 mars 2015, 16:13:54
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:

Re: Fråga ang Java och function

Postat: 2 mars 2015, 16:20:55
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

Re: Fråga ang Java och function

Postat: 2 mars 2015, 16:32:00
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

Re: Fråga ang Java och function

Postat: 2 mars 2015, 17:53:32
av gOry
det jag har som problem nu är att

calcDirectRoute funktionen blir klar innan directionsService.route

Re: Fråga ang Java och function

Postat: 2 mars 2015, 18:47:20
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

Re: Fråga ang Java och function

Postat: 2 mars 2015, 18:54:29
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);
   });

Re: Fråga ang Java och function

Postat: 2 mars 2015, 22:48:37
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: