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.

Cómo solucionar este error: No capturado (en la promesa) TypeError: No se pueden leer las propiedades de undefined (leyendo ‘length’)

Estoy creando un sitio web que carga modelos 3D gltf. Quiero cargar más modelos usando un bucle.

“`javascript
const loader = new GLTFLoader()
//.setPath( ‘models/gltf/DamagedHelmet/glTF/’ );
.setPath( ‘resources/’ );
const resourceData = [“Learning Bee1″,”Learning Bee2″,”Learning Bee3”];
//const l = resourceData.length;

for(let i=0; i<resourcedata.length;i++){
let oresource = resourcedata[i];
let smodelname = oresource + “.gltf”;
loader.load( smodelname, function ( gltf ) {

gltf.scene.traverse( function ( child ) {

    if ( child.ismesh ) {

        roughnessmipmapper.generatemipmaps( child.material );

    }

});

});

scene.add( gltf.scene );

roughnessmipmapper.dispose();

render();
}

});

cuando lo ejecuto, se muestra el siguiente error. ¿cómo puedo solucionar esto?

three.module.js:38723 uncaught (in promise) typeerror: cannot read properties of undefined (reading ‘length’)
at three.module.js:38723 let=”” oresource=”resourceData[i];” let=”” smodelname=”oResource” +=”” “.gltf”;=”” loader.load(=”” smodelname,=”” function=”” (=”” gltf=”” )=”” {=”” gltf.scene.traverse(=”” function=”” (=”” child=”” )=”” {=”” if=”” (=”” child.ismesh=”” )=”” {=”” roughnessmipmapper.generatemipmaps(=”” child.material=”” );=”” }=”” });=”” });=”” scene.add(=”” gltf.scene=”” );=”” roughnessmipmapper.dispose();=”” render();=”” }=”” });=”” cuando=”” lo=”” ejecuto,=”” se=”” muestra=”” el=”” siguiente=”” error.=”” ¿cómo=”” puedo=”” solucionar=”” esto?=”” three.module.js:38723=”” uncaught=”” (in=”” promise)=”” typeerror:=”” cannot=”” read=”” properties=”” of=”” undefined=”” (reading=”” ‘length’)=”” at=””></resourcedata.length;i++){
let oresource = resourcedata[i];
let smodelname = oresource + “.gltf”;
loader.load( smodelname, function ( gltf ) {

gltf.scene.traverse( function ( child ) {

    if ( child.ismesh ) {

        roughnessmipmapper.generatemipmaps( child.material );

    }

});

});

scene.add( gltf.scene );

roughnessmipmapper.dispose();

render();
}

});

cuando lo ejecuto, se muestra el siguiente error. ¿cómo puedo solucionar esto?

three.module.js:38723 uncaught (in promise) typeerror: cannot read properties of undefined (reading ‘length’)
at three.module.js:38723>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error “TypeError: No se pueden leer las propiedades de undefined (leyendo ‘length’)” indica que el código está intentando acceder a la propiedad length de un objeto no definido, que en este caso es el arreglo “resourceData”. Para solucionarlo, asegúrese de que el arreglo “resourceData” esté definido y contenga los datos correctos antes de ejecutar el bucle. También puede comprobar si el arreglo no está vacío antes de ejecutar el bucle, de esta manera:

    const loader = new GLTFLoader()
          .setPath('resources/');
    const resourceData = ["Learning Bee1","Learning Bee2","Learning Bee3"];
    
    if (resourceData.length > 0) {
      for(let i=0; i<resourcedata.length;i++){
          let oresource = resourcedata[i];
          let smodelname = oresource + ".gltf";
          loader.load(smodelname).then(function ( gltf ) {
              gltf.scene.traverse(function ( child ) {
                  if ( child.ismesh ) {
                      roughnessmipmapper.generatemipmaps( child.material );
                  }
              });
              scene.add(gltf.scene);
              roughnessmipmapper.dispose();
              render();
          }).catch(function ( error ) {
              console.error( 'error occurred while loading file ' + smodelname + '. error message: ' + error.message );
          });
      }
    }
    

    además, asegúrese de que el código dentro de la función load() se ejecute solo cuando el modelo se cargue correctamente. puede utilizar promesas para garantizar que el código se ejecute solo después de que se cargue el modelo. let=”” oresource=”resourceData[i];” let=”” smodelname=”oResource” +=”” “.gltf”;=”” loader.load(smodelname).then(function=”” (=”” gltf=”” )=”” {=”” gltf.scene.traverse(function=”” (=”” child=”” )=”” {=”” if=”” (=”” child.ismesh=”” )=”” {=”” roughnessmipmapper.generatemipmaps(=”” child.material=”” );=”” }=”” });=”” scene.add(gltf.scene);=”” roughnessmipmapper.dispose();=”” render();=”” }).catch(function=”” (=”” error=”” )=”” {=”” console.error(=”” ‘error=”” occurred=”” while=”” loading=”” file=”” +=”” smodelname=”” +=”” ‘.=”” error=”” message:=”” +=”” error.message=”” );=”” });=”” }=”” }=”” ="" además,="" asegúrese="" de="" que="" el="" código="" dentro="" de="" la="" función="" load()="" se="" ejecute="" solo="" cuando="" el="" modelo="" se="" cargue="" correctamente.="" puede="" utilizar="" promesas="" para="" garantizar="" que="" el="" código="" se="" ejecute="" solo="" después="" de="" que="" se="" cargue="" el=""></resourcedata.length;i++){
    let oresource = resourcedata[i];
    let smodelname = oresource + ".gltf";
    loader.load(smodelname).then(function ( gltf ) {
    gltf.scene.traverse(function ( child ) {
    if ( child.ismesh ) {
    roughnessmipmapper.generatemipmaps( child.material );
    }
    });
    scene.add(gltf.scene);
    roughnessmipmapper.dispose();
    render();
    }).catch(function ( error ) {
    console.error( 'error occurred while loading file ' + smodelname + '. error message: ' + error.message );
    });
    }
    }

    además, asegúrese de que el código dentro de la función load() se ejecute solo cuando el modelo se cargue correctamente. puede utilizar promesas para garantizar que el código se ejecute solo después de que se cargue el modelo.>

Comments are closed.