Mi pregunta es acerca de Javascript. Tengo una función de devolución de llamada que recibe un objeto de posición en una devolución de llamada exitosa.Javascript asignando el valor de retorno de una función de devolución de llamada a la variable global
El problema es que cuando intento establecer las propiedades del objeto Position en una variable global en una devolución de llamada exitosa, simplemente no me deja hacerlo y lo global simplemente permanece indefinido. Como solución alternativa a eso, en lugar de establecer directamente las propiedades del objeto como variables globales, intento devolverlo a través de la función de devolución de llamada, pero no encontré la manera de establecer el valor devuelto variable.
Aquí está el código simplificado.
var x;
navigator.geolocation.getCurrentPosition(onSuccess, onError);
//on Successful callback receives a Position Object
function onSuccess(position) {
var coords = position.coords;
x=coords; // Setting directly to an object does not work x still remains undefined after succesful callback
return coord; // Trying to set this to a global object
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
realmente buen punto, mi respuesta es un descuido estúpido de mi parte. el código no es lineal, por lo que tendrá que hacer lo que quiera con los coords en la devolución de llamada, para asegurarse de que el valor ha sido vinculado – WickyNilliams
En realidad tiene razón. La función getCurrentPosition está tratando de obtener la geolocalización que es asincrónica es por eso que cuando intento acceder desde la variable global, probablemente no esté configurado y vuelva a estar indefinido. ¿No hay forma de asignarle a la variable el valor devuelto después de que la función asíncrona haya terminado con su trabajo? –
@Torukojin: No, ¿a dónde debería devolver el valor? Como se dijo, el código se ejecuta de forma asíncrona. Es por eso que el valor pasa como un parámetro de la función de devolución de llamada para que pueda usarlo y hacer lo que quiera con él. Si fuera posible 'devolver 'el valor, entonces' getCurrentPosition' lo haría. Pero no lo es, por lo tanto, ha proporcionado una devolución de llamada. Tal vez encuentre [este artículo] (http://felix-kling.de/blog/2011/01/14/how-to-return-data-from-an-ajax-call/) útil para comprender el problema (pero no soy tan bueno escribiendo;)) –