[英]JS function parameters + Three.js
我有2個參數的對象-Obj3D,名稱,我想按名稱加載對象:
function load3DObjectByName(obj, loader)
{
loader.load(
"resources/3D/meshes.dae",
function(collada) {
obj.Obj = collada.scene.getChildByName(obj.Name, true);
window.alert(obj.Obj["name"]); // obj.Obj != undefined
}
);
window.alert(obj.Obj["name"]); // obj.Obj == undefined
}
但是加載后obj.Obj仍未定義... loader = ColladaLoader。
如果loader.load
是異步的,則不要期望在函數調用后立即填充該對象。 換一種說法:
load3DObjectByName(obj, loader);
//obj might not be ready yet.
改用Promise或繼續使用CPS。
function load3DObjectByName(obj, loader)
{
return new Promise(function(resolve) {
loader.load(
"resources/3D/meshes.dae",
function(collada) {
obj.Obj = collada.scene.getChildByName(obj.Name, true);
resolve(obj);
}
);
});
}
var prom = load3DObjectByName(obj, loader);
prom.then(function(obj){
//obj here is finished and can be used now.
});
正如MinusFour指出的,loader.load是異步的。 這意味着-代碼將按以下方式執行
loader.load(..., youranonymousfunctionReference)
window.alert(...
// and then from eventloop
youranonymousfunctionReference.
因此,在調用window.alert時,匿名函數尚未執行,因此未定義Obj。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.