Сделайте метод паузы, пока другое свойство не будет готово - PullRequest
0 голосов
/ 26 августа 2011

У меня есть объект, используемый для взаимодействия с IndexedDB.У него есть готовое свойство, которое изменяется на 2, когда база данных закончила открываться.Как я могу сказать методу read ждать, пока this.ready == 2?

var db = {
    open: function() {//a callback sets this.ready to 2 when the database has been successfully opened},

    ready: 0,

    read: function() {
        if(!this.ready == 2) {//pause until this.ready == 2}

        ...
    }
}

Должен ли я написать функцию с помощью setTimeout для проверки this.ready каждые 100 миллисекунд или есть более элегантное решение?

Ответы [ 4 ]

0 голосов
/ 26 августа 2011

Я согласен с @gddc - Вы должны переключить свою логику, чтобы использовать обратные вызовы.У вас уже есть обратный вызов open (по крайней мере, в соответствии с вашим примером кода), так почему бы просто не вызвать read, когда ваш обратный вызов open завершен?Тогда нет необходимости делать блокировку в вашем скрипте.

0 голосов
/ 26 августа 2011

Тайм-аут (на самом деле, вероятно, интервал, который отменяет себя) - единственный хороший способ в JavaScript «ждать» чего-либо.В противном случае, поскольку существует только один поток, вы в конечном итоге блокируете все остальные выполнения JS в браузере.Другим вариантом было бы, чтобы что-то вызывало вашу функцию, когда статус становится 2 (используйте обратный вызов).

«Ожидание» приближается так:

var myWait = setInterval(function () {
  if (status == 2) {
    clearInterval(myWait);

    myFunction();
  }
}, 100);
0 голосов
/ 26 августа 2011

используя геттеры и сеттеры для объекта, вы можете определить собственный обратный вызов, когда готово, а затем запустить ваш код, если / когда он установлен на 2 читать здесь

0 голосов
/ 26 августа 2011

обычно любая пауза должна быть сделана в другом потоке, но я очень новичок в javascript, поэтому он может быть другим.но вы также можете попытаться заставить функцию вернуть любые данные, которые вам нужны, а затем передать их в function2 function2 (function1 ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...