Dexie JS ..删除问题
Dexie JS .. Delete issue
我正在尝试使用 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"})});
请让您使用 promise 的函数 return 成为一个 promise,这样您就可以将调用链接到它们。
关于在 Collection.each() 中调用 delete,这是不可能的,因为 Collection.each() 是只读的,除非您从读写事务中调用它。如果您想在迭代中修改内容,请使用 Collection.modify() 而不是 Collection.each()。 Collection.each 的注释部分对此进行了描述:https://dexie.org/docs/Collection/Collection.each()#notes
我正在尝试使用 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"})});
请让您使用 promise 的函数 return 成为一个 promise,这样您就可以将调用链接到它们。
关于在 Collection.each() 中调用 delete,这是不可能的,因为 Collection.each() 是只读的,除非您从读写事务中调用它。如果您想在迭代中修改内容,请使用 Collection.modify() 而不是 Collection.each()。 Collection.each 的注释部分对此进行了描述:https://dexie.org/docs/Collection/Collection.each()#notes