Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/04/2018, 13:03
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema al devolver resultado de una funcion

Para usar las dos soluciones del final, es necesario que reescribas esa parte de tu código de la forma en la que se muestra en los ejemplos de arriba.

En lugar de esto:

Código Javascript:
Ver original
  1. var respuesta2=rellenaLista()
  2. alert(respuesta2)
  3. if(respuesta2==0){return false;}

Debe ser así para la promesa:

Código Javascript:
Ver original
  1. rellenaLista().then(function(respuesta){
  2.     if (!respuesta){
  3.         alert("El nombre de usuario que ha elegido no esta disponible. Por favor eliga otro para ver si esta disponible para usted.");
  4.         return false;
  5.     }
  6. });

Y así para el callback:

Código Javascript:
Ver original
  1. rellenaLista(function(respuesta){
  2.     if (!respuesta){
  3.         alert("El nombre de usuario que ha elegido no esta disponible. Por favor eliga otro para ver si esta disponible para usted.");
  4.         return false;
  5.     }
  6. });

Así, tal como lo ves, sin el var respuesta2. Solo lo que se muestra.

----------------------------

Por otro lado, para este tipo de problemas en los que se ejecutan procesos asincrónicos, es preferible evitar el uso de devolución de respuestas mediante la sentencia return (error mío al elaborar el ejemplo con dicha sentencia) y, en su lugar, apoyarse en el trabajo con promesas o callbacks.

Dicho esto, lo deseable sería trabajar de una manera similar a esta:

Código Javascript:
Ver original
  1. function nuevoUsuario(nombre){
  2.     verificarDisponibilidad(nombre).then(function(respuesta){
  3.         if (!respuesta){ //Cero equivale a "false"
  4.             registrarNombre(nombre);
  5.         }
  6.         else{
  7.             alert("El nombre ya se encuentra registrado");
  8.         }
  9.     });
  10. }
  11.  
  12. function verificarDisponibilidad(nombre){
  13.     return new Promise(function(exito, error){
  14.         var xhr = new XMLHttpRequest();
  15.  
  16.         xhr.open("GET", "verificar.php?nombre=" + nombre);
  17.         xhr.send();
  18.         xhr.addEventListener("load", function(){
  19.             if (this.status == 200){
  20.                 exito(this.responseText); //La respuesta será el número de coincidencias del nombre en la base de datos
  21.             }
  22.         }, false);
  23.     });
  24. }
  25.  
  26. nuevoUsuario("sentoki79");

Así nos olvidamos de los return y trabajamos utilizando las bondades del desarrollo actual de ECMAScript.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 20/04/2018 a las 13:23 Razón: El "return" no es aconsejable en procesos asincrónicos