使方法暂停,直到另一个属性准备就绪

时间:2011-08-26 18:44:28

标签: javascript javascript-events

我有一个用于与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 :(得分:0)

通常任何暂停都需要在不同的线程中完成,但我对javascript很新,所以它可能会有所不同。但你也可以尝试让函数返回你需要的任何数据,然后将它输入function2 函数2(功能1())

答案 1 :(得分:0)

超时(实际上,可能是取消自身的间隔)是JavaScript中“等待”某事的唯一好方法。否则,因为只有一个线程,所以最终会阻止浏览器中的所有其他JS执行。另一个选择是当状态变为2时使用调用你的函数(使用回调)。

接近“等待”:

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

    myFunction();
  }
}, 100);

答案 2 :(得分:0)

在对象上使用getter和setter,可以在设置ready时定义自定义回调,然后在/当它设置为2时运行代码 read here

答案 3 :(得分:0)

我同意@ g.d.d.c - 您应该切换逻辑以使用回调。您已经有open回调(至少根据您的代码示例),那么为什么不在您的read回调完成后简单地调用open?然后,您无需在脚本中进行阻止操作。