Dexie JS .. Удалить проблему

Я пытаюсь удалить запись по идентификатору из indexedDB с помощью dexie.js. (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"})});

1 ответ

Решение

Пожалуйста, позвольте вашим функциям, использующим обещания, возвращать обещание, чтобы вы могли связать их вызовы.

Что касается вызова delete внутри Collection.each(), это невозможно, потому что Collection.each () доступно только для чтения, если вы не вызываете его из транзакции чтения-записи. Если вы хотите изменить что-то в рамках итерации, используйте Collection.modify() вместо Collection.each(). Это описано в разделе "Примечания" для Collection.each: https://dexie.org/docs/Collection/Collection.each()

Другие вопросы по тегам