@sortfact333
// Progress
function onProgress( xhr ) {
if ( xhr.lengthComputable ) {
const percentComplete = xhr.loaded / xhr.total * 100;
console.log( Math.round( percentComplete, 2 ) + '% downloaded' );
}
}
function onError() {
const message = "Error loading model";
console.log( message );
}
console.log('Start load')
const loader = new GCodeLoader();
loader.load( 'models/gcode/benchy.gcode', function ( object ) {
object.position.set( - 100, - 20, 100 );
scene.add( object );
}, onProgress , onError);
console.log('End load for mode l ')
loader.load( 'models/gcode/benchy.gcode', function ( object ) {
object.position.set( - 100, - 20, 100 );
scene.add( object );
}, onProgress , onError);
console.log('End load for mode 2 ')
console.log('Run animate')
const animate = function () {
requestAnimationFrame( animate );
renderer.render( scene, camera );
};
animate();
Как мне правильно это сделать?
Желательно с объяснением.
Решения вопроса 0
Ответы на вопрос 1
@Aleksandr-JS-Developer
Ответ: ставите на загрузку, ждёте окончания загрузки, выполняете код Х после завершения загрузки.
loader.load( 'models/gcode/benchy.gcode', function ( object ) {
// code
}, onProgress , onError);
console.log('End load for mode 2 ')
Так не работает, потому, что любое обращение на сервер — асинхронное.
Это значит, что оно может занять времени от 0 до Х. Это время код продолжает выполнятся дальше, а ваш запрос выпадает из основного потока и // code
сработает только после завершения получения ответа (как ошибки, так и удачного). Даже если подключение идёт 0.0000001мс, то код всё равно не станет его ждать и пойдёт выполнятся дальше.
Тут есть два решения:
Выполнять весь нужный код в // code
(т. е. в callback-функции), либо сказать программе ждать окончания загрузки (async/await).
Лучше, конечно, сделать через калбеки, чтобы пользователь не видел «зависание» приложения, пока грузятся модели.