【问题标题】:Dexie JS .. Delete issueDexie JS .. 删除问题
【发布时间】:2020-11-12 01:36:18
【问题描述】:

我正在尝试使用 dexie.js 从 indexedDB 中按 ID 删除记录。 (Dexie.js 是 indexedDB 的包装器)

//Database and table structure
window.trollflixDB_offline_jokes = new Dexie("trollflixDB_offline_jokes");
trollflixDB_offline_jokes.version(1).stores({
    offline_jokes: "++id, joke_id, joke"
});

//Get data
window.get_offline_jokes = function(){
    trollflixDB_offline_jokes.offline_jokes.where('id').above(-1).limit(1).each(result => {
        console.log(result.id); //122
        del_joke(result.id);
    });
};

//Delete data
window.del_joke = function(delete_id){
    console.log(delete_id); //122
    console.log(typeof delete_id, typeof Dexie, typeof trollflixDB_offline_jokes, typeof trollflixDB_offline_jokes.offline_jokes);
    //number function object object

    trollflixDB_offline_jokes.offline_jokes.where('id').equals(delete_id).delete();
};

get_offline_jokes();

当我在 DEV 控制台上或在函数范围外尝试时,该函数正在工作。 trollflixDB_offline_jokes.offline_jokes.where('id').equals(122).delete();

我尝试使用不同的语法,但它不起作用。 trollflixDB.recent_notifications.where({'id': delete_id}).delete();

在 Opera、Chrome 上测试。没有返回任何错误、警告或承诺异常。

如果您想在浏览器上进行测试,这里是如何通过复制粘贴快速将数据放入开发控制台...

const getScript=e=>new Promise((o,n)=>{const t=document.createElement("script");t.src=e,t.async=!0,t.onerror=n,t.onload=t.onreadystatechange=function(){const e=this.readyState;e&&"loaded"!==e&&"complete"!==e||(t.onload=t.onreadystatechange=null,o())},document.head.appendChild(t)});getScript("https://unpkg.com/dexie@2.0.4/dist/dexie.min.js").then(()=>{window.trollflixDB_offline_jokes=new Dexie("trollflixDB_offline_jokes"),trollflixDB_offline_jokes.version(1).stores({offline_jokes:"++id, joke_id, joke"}),trollflixDB_offline_jokes.offline_jokes.put({joke_id:"32HUHU)",joke:"xD XD"})});

【问题讨论】:

    标签: javascript promise indexeddb dexie dexiejs


    【解决方案1】:

    请让您使用 Promise 的函数返回一个 Promise,以便您可以将调用链接到它们。

    关于在 Collection.each() 中调用 delete,这是不可能的,因为 Collection.each() 是只读的,除非您从读写事务中调用它。如果您想在迭代中修改内容,请使用 Collection.modify() 而不是 Collection.each()。 Collection.each 的注释部分对此进行了描述:https://dexie.org/docs/Collection/Collection.each()#notes

    【讨论】:

    • 是的,我刚刚将each 替换为modify,并且成功了。您的文档对我来说就像百科全书。我没有完整地阅读它。但感谢大卫的支持,也感谢 API。 :)
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2022-01-20
    • 1970-01-01
    • 2022-08-04
    • 2015-03-26
    • 2011-09-05
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多