2011-08-26 35 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回撥完成後?然後,不需要在腳本中進行阻止操作。

相關問題