JavaScript проблема с переменной класса

бьюсь об заклад уже который день. Инициализирую класс:

    constructor(glb, texture, isClickable, isHoverable){
        this.GLB = glb;
        this.texture = texture;
        this.clickable = isClickable;
        this.hoverable = isHoverable;

        this.loader = new Loader();

        this.obj = "LALA";

    }

Методом этого класса меняю переменную obj :

addToScene(_scene){
        var texture = this.loader.textureloader.load(this.texture);
        texture.flipY = false;

        var hoverable = this.hoverable;
        var clickable = this.clickable;

        var tester = this.test.bind(this);
        
        this.loader.gltfloader.load(this.GLB, function(gltf){
            var root = gltf.scene;
            root.traverse( function ( object ){
                if(object.isMesh){
                    object.material = new THREE.MeshPhongMaterial({map: texture});
                    object.userData.canHover = hoverable;
                    object.userData.clickable = clickable;
                    object.userData.basicColor = object.material.color.getHex();
                    tester(object);
                }
            });
            
            _scene.add(root);
        });

    }

    test(object){
        this.obj = object;
    }

Ну, точнее двумя методами, меняет переменную именно функция test(object). В итоге эта переменная не меняется, больше всего путает меня то, что когда я вывожу в консоль объект целиком, то в поле obj информация записана верно, то что мне нужно. Но когда я обращаюсь к конкретному полю этого класса, в выводе получаю значение, которое я задавал при инициализации этого класса. Вопрос: Видимо, я не правильно изменяю переменную класса. Как правильно изменять переменную класса, чтобы она менялась у самого экземпляра класса? Скрины с выводом и кодом приложу. Всем заранее спасибо за ответы. Вывод консоли

Код, класса

Упростил немного, здесь в сниппете я не имею возможность загрузить локальный url моего glb файла, но я произвел те же манипуляции в функции, которая отвечает за ошибки. В прочем это не важно, из кода видно, что я меняю переменную obj внутри функции загрузки, но на выходе я получаю не измененное значение.

class Object {
  constructor() {
    this.obj = "Init Value";
  }

  someMethod() {
    var loader = new THREE.GLTFLoader();
    var obj = this.obj;
    loader.load("", function(gltf) {}, function(process) {}, function(error) {
      console.log(obj)
      obj = "Changed Value";
    });
    console.log(obj);
  }

}

var Object1 = new Object();
Object1.someMethod();
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r121/three.min.js" integrity="sha512-yNJzAsg5JyP91u+sLHlUDULMBd3hmEiVkYeeN1cQBKaLZ7EyT6oH2u5THNIRM2Fu6VKcZJv+F/QAp1h/qzy9Ow==" crossorigin="anonymous"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/examples/js/loaders/GLTFLoader.js"></script>


Ответы (1 шт):

Автор решения: Qwertiy

class Object {
  constructor() {
    this.obj = "Init Value";
  }

  someMethod() {
    var loader = new THREE.GLTFLoader();
    var me = this
    
    new Promise(function (resolve) {
      loader.load("", function(gltf) {}, function(process) {}, function(error) {
        console.log(me.obj)
        me.obj = "Changed Value";
        resolve()
      });
    }).then(function () {
      console.log(me.obj);
    })
  }
}

var Object1 = new Object();
Object1.someMethod();
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r121/three.min.js" integrity="sha512-yNJzAsg5JyP91u+sLHlUDULMBd3hmEiVkYeeN1cQBKaLZ7EyT6oH2u5THNIRM2Fu6VKcZJv+F/QAp1h/qzy9Ow==" crossorigin="anonymous"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/examples/js/loaders/GLTFLoader.js"></script>

→ Ссылка