6
在閱讀HTML5 IndexedDB Specification時,我對它的異步請求模型有些懷疑。在查看request api example時,使用open
方法啓動異步請求。對HTML5 IndexedDB Async API的疑問
var request = indexedDB.open('AddressBook', 'Address Book');
request.onsuccess = function(evt) {...};
request.onerror = function(evt) {...};
在該請求開始時,尚未定義事件處理程序。
- 這不是一個競賽條件嗎?
- 在JavaScript解釋器執行
onsuccess
分配之前open
方法成功時會發生什麼? - 或者只有在兩個回調都被註冊後才真正開始請求?
在我看來像下面的API會更合乎邏輯:
db.open('AddressBook', 'Address Book', {
onsuccess: function(e) { ... },
onerror : function(e) { ... }
});
好的發現,搜索的關鍵詞似乎是「運行完成」。這就解釋了爲什麼代碼可以在沒有任何種族的情況下工作,但我仍然認爲它是糟糕的api設計的標誌。 – 2011-04-13 19:18:50