I found some inspiration in @brakebein's answer which led me to figure out the solution myself. Here is the full code that worked for me, in case it helps anyone else - KUDOS TO BRAKEBEIN! :)
// Loading Texture and OBJ files
let OBJfiles = ['love3','rose'];
let _MTLLoader = new THREE.MTLLoader().setPath( 'models/' );
// This function loads the next MTL and OBJ file in the queue
function loadNextMTL () {
if (index > OBJfiles.length - 1) return;
_MTLLoader.load( OBJfiles[index]+'.mtl', function ( materials ) {
materials.preload();
new THREE.OBJLoader()
.setMaterials( materials )
.setPath( 'models/' )
.load( OBJfiles[index]+'.obj', function ( group ) {
mesh = group.children[0];
mesh.material.side = THREE.DoubleSide;
mesh.position.y = 0.25;
mesh.scale.set(0.02,0.02,0.02);
markerRoot[index].add(mesh);
index++; // Increment count and load the next OBJ
loadNextMTL();
});
// onProgress, onError > These can be used to keep track of the loads
});
}
loadNextMTL (); // Start the preloading routine