Автоинкремент нескольких столбцов в indexeddb - PullRequest
0 голосов
/ 06 апреля 2019

Кто-нибудь знает - как мы можем указать автоинкремент для двух столбцов в indexeddb.

Я знаю - мы можем указать автоинкремент для одного столбца при создании таблицы следующим образом -

var objectStore = thisDb.createObjectStore("note", { keyPath: "id", autoIncrement:true });

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

1 Ответ

0 голосов
/ 11 апреля 2019

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

Вы можете легко получить автоматически увеличенное значение. Значение предоставляется в виде result запроса put или add, который вставил новый объект.

Например:

function addThing(db, thing) {
  return new Promise((resolve, reject) => {
    let id = undefined;

    const transaction = db.transaction('things', 'readwrite');
    const store = transaction.objectStore('things');

    // wait to resolve the promise until the transaction is completed
    // so that we do not prematurely pretend the operation succeeded. resolve 
    // to the value of the new id
    transaction.oncomplete = event => resolve(id);

    transaction.onerror = event => reject(event.target.error);

    // store.add also works here
    const request = store.put(thing);

    // listen for the add event and grab the value of the new id
    // that indexedDB generated and store it in the id variable
    request.onsuccess = event => id = event.target.result;
  });
}


async function doSomething() {
  const something = {bar: 'baz'};

  const db = await open(...);
  const id = await addThing(db, something);
  db.close();

  something.id = id;
  console.log(something);
}
...