2011-08-26 62 views
0

我有一个用于与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毫秒或者是有一个更优雅的解决方案?

+0

这可能有助于http://stackoverflow.com/questions/5346694/how-to-implement-a-lock-in-javascript – Tija

回答

0

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

“等待”被接近,像这样:使用对象上的getter和setter方法,你可以自定义一个回调

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

    myFunction(); 
    } 
}, 100); 
0

通常任何暂停都需要在不同的线程中完成,但是对于javascript来说,这是非常新的,所以它可能会有所不同。但你也可以尝试让函数返回你需要的任何数据,然后将它馈送到函数中。function2(function1())

0

当准备设置,然后如果/当它被设置为运行你的代码2 read here

0

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

相关问题