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 に答える