IndexedDB - Promise Wrapper



Promise 类似于回调函数,它是一种技术,用于在你想要执行代码来完成一个异步操作时告诉什么,而无需停止 javascript 的运行时线程。

你可以使用 promise 替代向异步函数提供一个在该函数完成后运行的回调函数。

Jake Archibald 创建了 promise library,它使用 promise 而非事件。

它比传统的 IndexedDB 更容易使用。它在保持 API 结构的同时,对该 API 进行了简化。

我们这里只展示改进之处,关于我们可以如何使用 Promise library 的详细信息,你可以访问以下网站:

https://developers.google.com

它有一些改进:

  • IDBDatabase
  • IDBTransaction
  • IDBCursor

IDBDatabase

从对象存储中获取或设置的快捷方式

const value = await db.get(storeName, key);
await db.put(storeName, value, key);

从索引中获取的快捷方式

const value = await db.getFromIndex(storeName, indexName, key);

IDBTransaction

tx.store

如果一个事务是一个单一存储,则 store 属性引用该存储,否则它就是未定义的,然后我们使用

const tx = db.transaction('any transaction');
const store = tx.store;
tx.objectStore(storeName);

tx.done

.done promise 在一个事务成功完成后解决,否则它会因一个事务错误而被拒绝。

const tx = db.transaction(storeName, 'readwrite');
await Promise.all([
   tx.store.add('one', 'two'),
   tx.store.put('three', 'four'),
   tx.done,
]);

IDBCursor

游标前进方法为:

  • Advance
  • Continue
  • ContinuePrimaryKey

它们返回一个指向游标的 promise,否则返回 null。

let cursor = await db.transaction(storeName).store.openCursor();
while (cursor) {
   document.write(cursor.key, cursor.value);
   cursor = await cursor.continue();
}
广告