Es verdad eso que dices del código generado automáticamente. Si vas a hacer un programa sencillo, vale, pero si vas a hacer algo un poco más complicado, es mejor hacerlo todo a mano, porque luego gastas más tiempo en arreglarlo todo, que si lo hubieras hecho desde un principio por ti mismo.
Pongo aquí la solución por si le ayuda a alguien:
El problema de las llamadas asíncronas, se arreglan con la propiedad result del callresponder.
En la propiedad result escribimos la función a la que se llamará una vez que se haya recibido el resultado de la llamada asíncrona, de esta forma, en esa función ya podemos utilizar ese objeto.
Mi problema era un poco más complicado, porque yo no sólo tenía una función con una llamada a un callresponder, yo tenía una función, que realizaba una llamada, y ese resultado, se lo pasaba como parámetro a otra llamada a otro callresponder, además, la segunda llamada estaba dentro de un bucle for, controlado por una variable i, que era el índice del parámetro que recibía esta segunda llamada...
Esto lo he solucionado creando el token independientemente, sin callresponder ni nada.
Es un poco más complicado, así que si alguien tiene alguna vez el mismo problema, que lo diga y ya posteo la solución entera, que es bastante larga y liosa.
Un saludo.
Xyrer escribió:
Nunca he trabajado con el código generado automáticamente porque me parece demasiado "sucio" pero hasta donde conozco, las llamadas al servidor son asíncronas, no pasa igual que en php que puedes hacer el llamado a la bd y en la siguiente linea trabajar con el resultado, todas las llamadas deben disparar un evento que eventualmente activaría el listener que activa la función que procesa la información que llegó del servidor.
Según lo que veo, haces la llamada al php y un milisegundo después pides el valor de la variable, como aún no ha llegado nada, pues es undefined, luego, sin que lo sepas, llega la info y se asigna a la variable, cuando oprimes el botón por segunda vez, se vuelve a llamar al servidor y te muestra el valor que tenía la variable incluso antes de ese segundo llamado.
si no quieres enredarte tanto, supongo que podrías usar data binding en ese campo de texto, así se actualiza apenas llegue, pero no se como es el resto de tu código, igual hay otras formas de hacerlo.