我想知道是否有人知道如何“正确”检查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.
只是在删除之前保存记录密钥,删除记录然后检查记录是否在数据库中?
答案 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");
}
}
}
}