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

155
Vistas
condición de carrera de la función javascript no asíncrona

Estoy usando jsmediatags para analizar metadatos de archivos mp3. Esta función toma el título de un archivo. Lamentablemente, regresa antes de que se complete la devolución de llamada onSuccess . Esto es un problema porque después de esta función, los datos se serializan y envían ANTES de que se establezca el título de la canción.

¿Cómo puedo esperar hasta que jsmediatags.read esté realmente completo para regresar? (no es una función asíncrona).

 const get_song = (song_path, album) => { const song = { title: null, }; jsmediatags.read(song_path, { onSuccess: function (tag) { song.title = tag?.tags?.title; console.info("set song fields", song.title); }, onError: function (error) {} }); console.info("return from get_song", song.title); return song; }

Esto produce

 "return from get_song null", "set song fields TITLE"

Y luego uso song.title antes de que esté configurado.

¿Cómo puedo rediseñar mi código para que la serialización de la canción ocurra después de que se complete esta devolución de llamada?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Claro, puedes prometerlo:

 const get_song = async (song_path, album) => new Promise((resolve, reject) => { jsmediatags.read(song_path, { onSuccess: resolve, onError: reject }); });

Y luego utilícelo, por ejemplo, en una función async con await :

 (async () => { const tag = await get_song(song_path, album); song.title = tag?.tags?.title; })();
about 4 years ago · Juan Pablo Isaza Denunciar

0

const getSong = async songPath => { var tag = await new Promise((resolve, reject) => { new jsmediatags.Reader(songPath) .read({ onSuccess: (tag) => { console.log('Success!'); resolve(tag); }, onError: (error) => { console.log('Error'); reject(error); } }); }); return { title: tag?.tags?.title; } }
about 4 years ago · Juan Pablo Isaza 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