如何修复此错误:未捕获(承诺)类型错误:无法读取未定义的属性(读取“长度”)
Posted
技术标签:
【中文标题】如何修复此错误:未捕获(承诺)类型错误:无法读取未定义的属性(读取“长度”)【英文标题】:how fix this error:Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'length') 【发布时间】:2022-01-05 12:40:25 【问题描述】:我正在创建一个加载 gltf 3d 模型的网站。我想使用循环加载更多模型。
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();
);
当我运行这个时,显示如下错误。如何解决这个问题?
three.module.js:38723 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'length') 在三个.module.js:38723
【问题讨论】:
查看代码,如果你会正确缩进,你会发现scene.add( gltf.scene );
在定义gltf
的代码之外。
【参考方案1】:
你的代码缩进有点草率,它会让你犯下可以通过更简洁的代码避免的错误。
-
您在括号外调用
gltf.scene
,但它不存在:
loader.load( sModelName, function ( gltf )
// gltf exists here
);
// gltf does not exist here
scene.add( gltf.scene );
-
您在使用
roughnessMipmapper
之前将其丢弃。请记住,加载器中的回调函数需要一些时间才能执行,因为它正在等待完成加载您的资产。
loader.load( sModelName, function ( gltf )
// 2. This happens later, after assets load
roughnessMipmapper.generateMipmaps( child.material );
);
// 1. This gets called first
roughnessMipmapper.dispose();
【讨论】:
以上是关于如何修复此错误:未捕获(承诺)类型错误:无法读取未定义的属性(读取“长度”)的主要内容,如果未能解决你的问题,请参考以下文章
错误::未捕获(承诺中)类型错误:无法读取未定义的属性“内容”