So while the font is loading, a
let introText = null
one more hint, you can try to avoid callback hell and nulling variables. treat async ops for what they are, javascript has high level primitives for that.
async function app() {
const fontLoader = new FontLoader()
const font = await new Promise(res => fontLoader.load("/font.json", res))
const geometry = new TextGeometry('Scroll to Start', { font })
...
if you have multiple assets avoid waterfalls*
like this:
const [font, image, model] = await Promise.all([
new Promise(res => fontLoader.load("/font.json", res)),
new Promise(res => textureLoader.load("/image.jpg", res)),
new Promise(res => gltfLoader.load("/model.glb", res)),
])
...
this will give you much more confidence and code will be less fragile.
*
a waterfall is when assets load one after the other which is a huge waste of time