【问题标题】:Is there a way to get information on deleted record when calling IndexedDB's objectStore.delete?调用 IndexedDB 的 objectStore.delete 时,有没有办法获取有关已删除记录的信息?
【发布时间】:2013-06-16 21:25:16
【问题描述】:

当我从 objectStore 执行 delete() 时,该事件似乎没有与已删除记录相关的信息。它没有给我钥匙,甚至没有任何确认删除的东西(除了调用成功回调)。 event.target.resultundefined

它有没有办法给我一些信息?

console.dir(事件)

Event
    bubbles: false
    cancelBubble: false
    cancelable: false
    clipboardData: undefined
    currentTarget: null
    defaultPrevented: false
    eventPhase: 0
    returnValue: true
    srcElement: IDBRequest
    target: IDBRequest
        error: null
        onerror: function () { [native code] }
        onsuccess: function deleteNext(event)
        readyState: "done"
        result: undefined
        source: IDBObjectStore
        transaction: IDBTransaction
        webkitErrorMessage: undefined
        __proto__: IDBRequest
    timeStamp: 1371417349691
    type: "success"
    __proto__: Event

【问题讨论】:

    标签: html google-chrome firefox internet-explorer-10 indexeddb


    【解决方案1】:

    我不明白这一点......

    如果输入onsuccess回调关闭删除操作,则成功。在所有其他情况下,您将输入 onerror 回调。

    你为什么想回来?

    如果您在 SQL 数据库中执行删除语句,您也不会返回任何内容...

    【讨论】:

    • 除了规范文档声明成功函数并不意味着记录实际上已被删除:“无法知道某些记录是否实际被删除”
    • 您可以确定删除操作是成功的,但不能确定是否删除了任何记录。您尝试删除没有任何记录的对象或范围的含义,删除将成功。 SQL 也一样。如果您想知道将要删除的项目数量,您可以先进行计数,然后再删除。希望这能解决问题
    • 我明白这一点,但我使用的所有 SQL 数据库都提供了一种获取该信息的方法。例如MySQl:mysql_affected_rows 告诉您是否实际删除了任何行。 IndexedDB 中没有什么可以做同样的事情,也没有办法查询计数来告诉你这一点(因为它不是原子的。在你调用“delete”和“count”之间,另一个 DB 操作可能会运行影响计数)。但在 MySQL 中,您可以在同一个同步事务中运行 mysql_affected_rows(并锁定该表)。
    • 我认为这不是问题。我认为 indexeddb 在对象存储级别使用锁。这样您就无法为 1 个对象存储打开并发读写事务。我会尽快确认。
    • 我提到的是在同一个事务中进行计数和删除调用。这样你就不会有问题
    【解决方案2】:

    请原谅我的语言,但是WTF?显然,没有(至少是标准的)方法可以获取有关删除操作的任何信息。事实上,你甚至不知道它是否成功

    来自 Mozilla:

    根据规范,对象存储删除操作算法的结果是未定义的,因此通过查看请求结果无法知道某些记录是否实际被删除

    来自规范: http://www.w3.org/TR/IndexedDB/#object-store-deletion-operation

    这个算法的结果是不确定的。

    这似乎是一个重大失败。数据库怎么可能连操作成功或失败都不承认?!

    【讨论】:

    • 你是对的,这有点像 wtf 时刻。我想一个原因与面向无 sql 的持久性工具的设计有关。它有助于了解“最终一致性”和“机会锁定”等概念。
    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 2021-03-09
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多