Как запустить функцию класса по обещанию в Javascript? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть следующий класс:

let graphFactory = new GraphFactory();

function GraphFactory(){
    let value = 'something';
    this.release = function() {
        return value;
    }
} 

Теперь, когда я пытаюсь вызвать эту функцию из другого места в моей программе следующим образом:

let newvalue = graphFactory.release();

Он не распознает graphFactory, поскольку для загрузки этой функции требуется некоторое время.

Я хотел бы решить эту проблему, выдав обещание, когда graphFactory полностью загружен и активирован, но когда я попытался добавить функцию в GraphFactory функцию, подобную

function GraphFactory(){
    let value = 'something';
    this.release = function() {
        graphFactoryPromise(value);
    }
} 

, а затем

function graphFactoryPromise() {
     return new Promise(function(resolve,reject) {
            resolve('loaded');
     });
}

и называет его

graphFactoryPromise().then(function(result) {
    let newvalue = result;
});

По-прежнему не работает (graphFactory не распознается).

Каким было бы хорошее решение для этого?

UPDATE Я хочу иметь возможность вызывать функцию graphFactory.release() только после определения и загрузки graphFactory.

1 Ответ

1 голос
/ 30 апреля 2019

Попробуйте release() в качестве обещания:

const graphFactory = new GraphFactory();

function GraphFactory() {
  this.value = 'Something';

  const graphFactoryPromise = () =>
    new Promise(resolve => setTimeout(() => resolve('new-Something'), 1000));

  // Release is a promise
  this.release = async () => {
    this.value = await graphFactoryPromise(); // New Result
    return this.value;
  };
}

console.log(graphFactory.value);
graphFactory.release().then(console.log);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
...