Dexie.js - table.delete(id) не работает для удаления каждой строки

Я только начинаю работать с Декси, и, похоже, у меня не получается.

У меня небольшая база данных (менее 1000 строк), и я пытаюсь удалить каждую строку одну за другой, как только узнаю, что строка была отправлена ​​в удаленный API. Я также могу успешно сохранить в таблицу (которая определяется идентификатором и столбцом, в котором хранится сериализованный объект)

вот мой код:

if (online) {
    //we query the db and send each event
    database.open()
    let allEvents = database.events.toCollection()
    let total = allEvents.count(function (count) {
        console.log(count + ' events in total')
        //a simple test to ensure we're seeing the right number of records
    })
    allEvents.each(function(thisEvent){
        //push to remote API
        console.log('deleting ' + thisEvent.id)
        database.events.delete(thisEvent.id) //<= this doesn't seem to be working
    })
}

Все это, за исключением последнего оператора удаления. Любые идеи о том, как я должен это исправить? для меня важно удалять построчно.

заранее спасибо!


person AndrewO    schedule 29.09.2017    source источник


Ответы (3)


У меня возникла та же проблема, и ответ Евгении Паис мне не помог. Итак, после некоторых тестов я увидел, что проблема была с типом переменной: я использовал строку, но нужно число, поэтому я решил это так:

function removeRow (primaryKey) {
  primaryKey = parseInt(primaryKey);
  databaseName.tableName.where('primaryKey').equals(primaryKey).delete().then(function(deleteCount) {
    console.log ("Deleted " + deleteCount + " rows");
  }).catch(function(error) {
    console.error ("Error: " + error);
});

Так что имейте в виду, что вы используете число в качестве аргумента.

person siderio2    schedule 18.10.2017

Тип данных ключа не является проблемой, вы можете проверить это в моем примере здесь: пример

db.example.where('key').equals('one').delete();  

Возможно, вы пытаетесь удалить свойство, которое не является индексом.

Надеюсь, поможет!

person Eugenia Pais    schedule 21.10.2017
comment
Как я могу передать динамическое значение ключа равным вместо жесткого кодирования? Предположим, у меня есть машинописный текст const allItems: Todo[] = this.db.todos.toArray(); return this.db.todos.where('value').equals('wd').delete(); - person NoobCoder; 12.07.2021

Правильный способ удаления каждой строки должен выбирать конкретную строку и удалять ее:

database.tableName.where(indexId).equals(indexValue).delete();

person Eugenia Pais    schedule 09.10.2017
comment
Как я могу передать динамическое значение ключа равным вместо жесткого кодирования? Предположим, у меня есть машинописный текст const allItems: Todo[] = this.db.todos.toArray(); return this.db.todos.where('value').equals('wd').delete(); - person NoobCoder; 12.07.2021