在IndexedDB中检查成功的.delete()

时间:2013-01-31 19:57:29

标签: indexeddb

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

我发现了这个:

// 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.

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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");
            }
        }

    }
}