我正在尝试使用 suspense 从 Firebase 存储加载 GLTF 模型。为此,我需要先使用 getDownloadURL 方法异步获取模型的 URL,然后才能加载它。我所看到的是加载程序被反复调用,但从未使用过响应 - 我确定我错过了一些简单的东西..
我已将代码放入此代码沙箱中,它使用了在互联网上似乎相当常见的示例,我已替换了 firebase 访问器(因为它需要私有访问密钥才能按预期工作)但替换函数返回一个相当简单的超时后的网址。
总结一下沙盒,如果它是一个获取下载 url 的函数,它包裹在一个挂起函数中:
function getModelData(path) {
const storage = firebase.storage();
const urlPromise = storage.ref(path).getDownloadURL();
return { url: suspend(urlPromise) };
}
这在我的代码中使用如下:
export default function Model(props) {
const modelData = getModelData(props.path);
const gltf = useGLTF(modelData.url.read());
return (
<mesh rotation={props.rotation} position={props.position} scale={props.scale}>
<primitive object={gltf.scene.clone(true)} dispose={null}/>
</mesh>
);
}
挂起函数正确地抛出了它的promise,并且promise 解析了设置结果,但是挂起函数本身不断被调用并且result 方法总是未定义。