2012-03-26 33 views
2

我试图像DOM IDBDatabase例外3使用IndexedDB的

var store = trans.objectStore("todo"); 

这给在控制台下面erropr

Uncaught Error: NOT_FOUND_ERR: DOM IDBDatabase Exception 3 

虽然我希望这个错误(对象存储不存在),但我想抓住它。我试图给交易添加一个错误

trans.onerror = function(e) { ... } 

但是没有调用onerror。有没有什么办法使用onerror来捕获这个错误?或者是用try/catch包装它的唯一方法?

回答

3

为什么要抓住这个异常?在调用商店之前,可以检查数据库中是否存在以该名称存储的对象。

trans.db.objectStoreNames.contains("todo"); 

如果你想处理异常,这对性能不利。

+0

thnx的建议! – 2012-08-13 17:36:41

2

onerror处理程序用于异步调用。 objectStore是API中为数不多的同步调用之一,因此您必须使用传统的try..catch(e)

var store; 
try { 
    store = trans.objectStore("todo"); 
} catch(err) { 
    console.log("CAUGHT", err); 
} 
+0

你真的让我的一天,thnx! – 2012-03-26 20:46:30

+0

这里描述的究竟是什么?我感觉到objectStore.add也是同步的!这可能是trans.oncomplete不会触发的原因! – 2012-03-26 20:58:44

+0

看起来像。查看这里列出的例外:http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-add-IDBRequest-any-value-any-key >>我应该列出所有同步方法的列表API。这很混乱。另一个是createObjectStore()。 – buley 2012-03-26 23:51:56