2

我想知道是否有人想出如何“正确”检查delete()IndexedDB 中的功能是否真的成功删除了一条记录。

我找到了这个:

// As per spec http://www.w3.org/TR/IndexedDB/#object-store-deletion-operation
// the result of the Object Store Deletion Operation algorithm is
// undefined, so it's not possible to know if some records were actually
// deleted by looking at the request result.

是否只是在删除之前保存记录键,删除记录然后检查记录是否在数据库中?

4

2 回答 2

3

如果触发该对象应该已被删除,则向该方法.onsuccess返回的请求对象添加一个处理程序。.delete您还可以添加一个.onerror处理程序来处理从存储中删除对象时出现问题的情况。

您当然可以保存密钥并随后在.onsuccess处理程序中检查存储,但这不是必需的;如果请求成功,它就成功了。

如果您在该事务上执行多个操作,请注意,.onsuccess附加到删除请求的处理程序将在项目被删除后立即触发,如果您在同一事务上执行另一个操作并且其他操作失败,则整个事务将被回滚,包括删除。在这种情况下,最好将.onsuccess处理程序添加到事务中,这样您就可以确保所有操作都成功了。

于 2013-01-31T22:27:11.273 回答
1

您可以使用对象存储上的 get 命令简单地检查对象是否存在,您可以在删除对象时检索对象 ID。

function checkIfObjectExist(objectID){
    var request = indexedDB.open(baseName);
    request.onsuccess = function() {
        var db = request.result;
        var transaction = db.transaction(objectStoreName, 'readonly');
        var objectStore = transaction.objectStore(objectStoreName);
        var selectRequest = objectStore.get(objectID);
        selectRequest.onsuccess = function (e) {
            if (e.target.result != null) {
                console.log("Object Exist");
            }else{
                console.log("Object doesn't exist");
            }
        }

    }
}
于 2013-01-31T22:24:09.903 回答