Как мне получить идентификатор значения, которое я немедленно добавил с помощью dexie js?

Как мне получить доступ к id элемента, который я уже добавил, поскольку элементы иногда удаляются, увеличивающийся идентификатор не является однородным.

Я пробовал как в документации

    var db = new Dexie('FRIENDS');
    db.version(1).stores({
    friends: '++id,name,age,loves'
                });
    db.friends.add({
        name: 'user',
        age: 23,
        loves:'water',
    }).then(function(){
         return db.friends.get('user');
    }).then(function (res) {
        console.log(res.id);
    }).catch(function(error) {
             console.log ("Ooops: " + error);
          });

}

я получил undifined

2 ответа

Решение

Правильный ответ: созданный идентификатор будет передан как аргумент в обещании. Пример из документации:

db.table('todos')
  .add(todo)
  .then((id) => {
    // ...
  });

Или вернулся в стиле async-await:

const id = await db.table('todo').add(todo);

В вашем примере вы используете неправильный синтаксис .get()метод. Правильно:

table.get({keyPath1: value1, keyPath2: value2, ...});
// e.g.
table.get({id: 15})
// or
db.friends.add({
        name: 'user',
        age: 23,
        loves:'water',
    }).then(function(id){
         return db.friends.get({id});
    })

Чтобы помочь кому-либо еще в будущем

В конце концов решил проблему с помощью взлома.

    var db = new Dexie('FRIENDS');
    db.version(1).stores({
    friends: '++id,name,age,loves'
                });
    db.friends.add({
        name: 'user',
        age: 23,
        loves:'water',
    }).then(()=>{
db.friends.each(friend=>{
            window.lastId = { id:friend.id };
        })
.then(()=>{
   console.log(window.lastId.id)
});
});

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