,Tx是犯罪:IndexedDB的交易自動提交的邊緣情況的行爲
- 請求成功回調函數返回 - 這意味着多個請求只能當一個請求是從成功回調執行事務邊界內執行前一個
- 當你的任務返回到事件循環
這意味着,如果沒有請求提交給它,它不承諾,直到它返回到事件循環。通過
- 放置一個新的IDB的要求從以前的請求的成功回調內排隊一個新的任務事件循環隊列,而不是在這種情況下,提交新的要求同步
- :這些事實造成2個問題的狀態第一次成功回調立即返回,但另一個IDB請求已計劃
- 是在單個初始事務中執行的所有異步請求嗎?這是在情況十分必要要實現的結果與背壓拉動地方消費讓你在未來的形式的反饋,這是準備消費的另一響應
- :這些事實造成2個問題的狀態第一次成功回調立即返回,但另一個IDB請求已計劃
- 創建讀寫TX,不在返回事件循環之前放置任何請求並創建另一個請求
- 確實創建了一個隱含地提交了前一個tx?如果不是這樣,可能會出現嚴重寫鎖STARVATIONS,因爲:
如果有多個「讀寫」交易正試圖訪問同一 對象存儲(即如果他們有重疊的範圍),交易 首先創建的事務必須是首先訪問對象存儲的 的事務。由於前面的 段落中的要求,這也意味着它是唯一具有 訪問對象庫的事務,直到事務完成。
的通過遞歸請求提交與背壓從成功回調內排隊一個新的任務事件循環隊列的例子:
function recursiveFn(key) {
val req = store.get(key)
req.onsuccess = function() {
observer.onNext(req.result).onsuccess { recursiveFn(nextKey) }
}
}
Observer#onNext // returns Future[Ack] Ack is either Continue or Cancel
現在可以onsuccess
或onNext
做的setTimeout(0 )還是不讓整個事情成爲一個交易的一部分?
獎金的問題:
我認爲只讀事務暴露給消費者/用戶,只是因爲它是很難檢測一個批次的讀取結束,如果你遞歸地從先前的成功回調提出的新要求一個權利?否則,我不認爲有任何其他原因讓他們接觸到用戶,對吧?
您可以添加適當的鏈接到indexeddb規範嗎? – 2014-12-06 00:56:57
我沒有,這是從我的頭上,並從過去數週的IndexedDb強烈體驗。 – lisak 2014-12-06 00:58:32
Btw的IndexedDb開發人員在這裏回答了很多http://stackoverflow.com/q/10385364/306488 – lisak 2014-12-06 01:10:41