Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

191
Vistas
El retorno de Javascript no sale de la función

Tengo una función javascript que verifica si existe un artista en un archivo XML:

 function artistExists(artist) { // get data from artists.xml $('.loading').show(); $.get(artists_xml, function(xml){ $('.loading').hide(); $(xml).find('artist').each(function(){ if ($(this).find("ar_artist").text() == artist.val()) { alert ('artist exists'); return true; } //end if }); // end each alert ('artist does not exist'); return false; }); // end .get function } // end of artistExists function

¿Tengo razón al pensar que la línea 'return true' debería dejar de ejecutar la función? Pensé que lo haría, pero después de encontrar un registro y ejecutar la primera alerta, la ejecución continúa con la alerta de falla en la parte inferior.

¿Qué estoy haciendo mal, por favor? Gracias.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Sí, "deja" la ejecución de la función. La pregunta es, "¿qué función?" En este caso, la respuesta debería ser bastante clara: es la función que se pasa a .each() .

Puede terminar el comportamiento de bucle de .each() devolviendo false en lugar de true , pero eso aún no lo sacará de la función externa. Lo que probablemente debería considerar es configurar una variable local en la función externa y configurar la función interna cuando encuentre algo (y luego romper el bucle .each() ). Luego, la función principal puede verificar la variable local para ver si se configuró.

Este es un caso en el que realmente me gustaría usar una .reduce() o .inject() , pero jQuery no tiene una y realmente se oponen a ella.

over 4 years ago · Santiago Trujillo Denunciar

0

Devuelve false , en lugar de true , para terminar each ciclo; de los documentos :

Podemos detener el bucle desde la función de devolución de llamada devolviendo false .

Sin embargo, eso solo terminará each ciclo, no la función general. Tendrá que establecer una bandera para saber si encontró algo, por ejemplo, algo como esto:

 function artistExists(artist) { // get data from artists.xml $('.loading').show(); $.get(artists_xml, function(xml){ var found = false; // <== Added $('.loading').hide(); $(xml).find('artist').each(function(){ if ($(this).find("ar_artist").text() == artist.val()) { alert ('artist exists'); found = true; // <== Added return false; // <== Modified } //end if }); // end each if (!found) { // <== Added alert ('artist does not exist'); } // <== Added return found; // <== Modified }); // end .get function } // end of artistExists function
over 4 years ago · Santiago Trujillo Denunciar

0

$.get es una función asíncrona, lo que significa que la función principal, artistExists , regresará inmediatamente y se iniciará una solicitud GET. Para poder obtener el resultado, necesitará una devolución de llamada.

 function artistExists(artist, cb) { $('.loading').show(); $.get(artists_xml, function(xml) { var found = false; $('.loading').hide(); $(xml).find('artist').each(function(){ if ($(this).find("ar_artist").text() == artist.val()) { found = true; return false; // use return false to stop .each() } }); // the built in action. if (found) { alert ('artist exists'); } else { alert ('artist does not exist'); } // call the callback function cb (found); }); }

Luego, para usar, necesita usar una función de devolución de llamada. Desde

 var isExists = artistExists('lol'); // do stuff

Necesitas cambiarlo a:

 artistExists('lol', function(isExists) { // do stuff });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda