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

254
Vistas
¿No puedo obtener una promesa de javascript para esperar a que se agregue o elimine el elemento? (Solo parece esperar setTimeout())

Digamos que tengo el siguiente código JavaScript muy simple:

 function addPicture(name){ var src = document.getElementById("mainConsole"); var img = new Image(); img.onload=function() { img.id=name; src.appendChild(img); } img.src = name; } function clearpicture(name){ var elem = document.getElementById(name); elem.remove(); }

Esto parece funcionar bien siempre que estas funciones no estén aisladas en rápida sucesión. Hacer que el usuario haga clic en un enlace:

 <a href="javascript:void(0);" onclick="clearpicture('1.jpg');">test1</a>

elimina la imagen como cabría esperar. Sin embargo, si solo uso este código:

 addPicture("1.jpg"); clearpicture(1.jpg");

Obtengo: TypeError: elem is null . ¡Puedo resolver este problema con una promesa!

 let p = new Promise(function(resolve, reject) { setTimeout(() => resolve(1), 1000); // (*) console.log("now"); }).then(function(result) { clearpicture("1.jpg"); });

Todo funciona normalmente (después del retraso especificado, por supuesto). Luego, traté de hacer que la promesa esperara en la subrutina addpicture en lugar de setTimeout:

 let p = new Promise(function(resolve, reject) { addPicture("1.jpg","1",100,0,0); resolve(1); }).then(function(result) { clearpicture("1.jpg"); console.log("picture removed"); });

Me sale el mismo error null . En mi aplicación real, tengo tiempo para que se cargue la imagen, pero si trato de eliminar una serie de imágenes a la vez:

 clearpicture("1.jpg"); clearpicture("2.jpg"); clearpicture("3.jpg");

No se elimina nada, aunque tenga en cuenta que habría algún retraso ya que mis dos subrutinas realizan algún procesamiento antes de agregar o eliminar algo.

¿Cómo puedo hacer que el código javscript espere a que una imagen se cargue por completo o se elimine antes de que haga algo más?

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

0

function addPicture(name){ return new Promise((resolve, reject)=>{ var src = document.getElementById("mainConsole"); var img = new Image(); img.onload=function() { img.id=name; src.appendChild(img); img.src = name; return resolve(1) } img.onerror = function(){return reject()} } } addPicture.then(()=>clearPicture(name)) function clearpicture(name){ var elem = document.getElementById(name); elem.remove(); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

 function addPicture(name){ var src = document.getElementById("mainConsole"); var img = new Image(); return new Promise(v => ( img.onload = _ => ( img.id = name , src.appendChild(img) , v(name) ) , img.src = name )); } function clearPicture(name){ var elem = document.getElementById(name); elem.remove(); } function delay(value,ms){ return new Promise(v => setTimeout(v,ms,value)); } addPicture("https://i.ytimg.com/vi/1Ne1hqOXKKI/maxresdefault.jpg").then(name => delay(name,1000)) .then(clearPicture);
 img { height : 100vh; }
 <div id="mainConsole"></div>

Muestre durante 1 segundo y luego retírelo.

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