es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error no capturado (en promesa): Se ha excedido el tiempo límite de 3000ms. Error: Se ha excedido el tiempo límite de 3000ms.

Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.

Soy super nuevo en promesas, estoy intentando implementarlas pero tengo este error
Sin capturar (en promesa): Error: timeout de 3000ms superado Error: timeout de 3000ms superado
También tengo problemas al usar Promise.all (). then () porque esperaba un argumento.
Entornos: Angular v12 y Three.js
Espero que alguien pueda ayudarme, gracias de antemano.

  ngOnInit(): void {
    this.onPageLoad();
  }

onPageLoad(options) {
    this.loadPromise();

<pre><code>Promise.all().then(() => {
  this.resize();
  this.setupResize();
  this.addObjects();
  this.render();
});
</code></pre>

}

<p>“`
loadPromise() {
// Sin capturar (en promesa): Error: timeout de 3000ms superado Error: timeout de 3000ms superado
const fontOpen = new Promise((resolve, reject) => {
new FontFaceObserver(“Open Sans”).load().then(() => resolve);
console.log(‘La fuente Open Sans se ha cargado.’);
})

const fonPlayfair = new Promise((resolve, reject) => {
  new FontFaceObserver("Playfair Display").load().then(() => resolve);
  console.log('La fuente de Playfair Display se ha cargado.');
})

// Precargar imágenes
const preloadImages = new Promise((resolve, reject) => {
    imagesLoaded(document.querySelectorAll("img"), { background: true }, resolve);
    console.log("La imagen se ha cargado.")
});

let allDone = [fontOpen, fonPlayfair, preloadImages];

}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error “Uncaught (in promise): Error: 3000ms timeout exceeded Error: 3000ms timeout exceeded” por lo general indica que una promesa está tardando demasiado en ejecutarse y está expirando. En el código proporcionado, parece que la función loadPromise() está creando promesas pero no las está resolviendo ni rechazando.

    Para solucionar esto, debes asegurarte de que las promesas creadas en la función loadPromise() se resuelvan o rechacen correctamente. Una forma de hacerlo es usando el método Promise.all(), que espera a que todas las promesas se resuelvan o rechacen antes de ejecutar el código posterior.

    En la función onPageLoad(), estás llamando a Promise.all() sin argumentos, lo que está causando un error. Para solucionarlo, debes pasar como argumento a Promise.all() el array de promesas creado en la función loadPromise().

    Aquí está el código actualizado:

    ngOnInit(): void {
      this.onPageLoad();
    }
    
    onPageLoad(options) {
      const promises = this.loadPromise();
    
      Promise.all(promises).then(() => {
        this.resize();
        this.setupResize();
        this.addObjects();
        this.render();
      });
    }
    
    loadPromise() {
      const fontOpen = new Promise((resolve, reject) => {
        new FontFaceObserver("Open Sans").load().then(() => {
          console.log("Open Sans se ha cargado.");
          resolve();
        }).catch(reject);
      });
    
      const fonPlayfair = new Promise((resolve, reject) => {
        new FontFaceObserver("Playfair Display").load().then(() => {
          console.log("Playfair Display se ha cargado.");
          resolve();
        }).catch(reject);
      });
    
      const preloadImages = new Promise((resolve, reject) => {
        imagesLoaded(document.querySelectorAll("img"), { background: true }, resolve);
        console.log("Las imágenes se han cargado.");
      });
    
      return [fontOpen, fonPlayfair, preloadImages];
    }
    

    En la función loadPromise(), actualizamos las promesas para llamar a resolve() en una carga exitosa y reject() en una carga fallida. Luego, devolvemos un array de todas las promesas.

    En la función onPageLoad(), pasamos el array de promesas a Promise.all() y manejamos correctamente el código posterior después de que se hayan resuelto todas las promesas.

    ¡Espero que esto ayude!

Comments are closed.