我是indexedDB(IDB)的新手,并尝试使用jakearchibald的IndexedDB Promised API 处理CRUD。我也可以创建数据库,objectStore和索引
创建数据库
devDependencies
我已经创建了表格和索引标题和年份。
创建表/对象存储和索引
createEmptyDB: function () {
return new Promise( function (resolve) {
idb.open( IDB.dbName, 1, function (idbCx) {
}).then( resolve)
.catch( function (err) {
reject( err);
});
});
}
我已经创建了游标以获取与书名名称匹配的数据作为“ Book6”
光标迭代表中的值
createTableAndIndex: function (tableName) {
return new Promise( function (resolve) {
idb.open( IDB.dbName, 2, function (idbCx) {
if (!idbCx.objectStoreNames.contains(tableName)) {
bookssOS = idbCx.createObjectStore(tableName, {keyPath:"id",autoIncrement:true,});
bookssOS.createIndex('title', 'title', {unique: false});
bookssOS.createIndex('year', 'year', {unique: false});
}
}).then( resolve);
});
}
但是,当我尝试通过注释索引标题并启用年份索引来匹配“ 2000”年以获取图书时,由于以下记录,它没有获取2000年添加的图书。请帮助我找到问题,并先感谢。
fetchUsingCursor: function ( tableName) {
return new Promise( function (resolve, reject) {
idb.open( IDB.dbName).then( function (idbCx) { // idbCx is a DB connection
var tx = idbCx.transaction('books', 'readonly');
var store = tx.objectStore('books');
var storeIndex = store.index('title');
var range = IDBKeyRange.only("Book6");
// var storeIndex = store.index('year');
// var range = IDBKeyRange.only(2000);
return storeIndex.openCursor(range);
}).then(function bookItems(cursor) {
if (!cursor) {
return;
}
for (var field in cursor.value) {
console.log(cursor.value['title']);
}
return cursor.continue().then(bookItems);
})
.catch( function (err) {
reject( err);
});
});
}