首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用dexie示例代码动态更新索引

无法使用dexie示例代码动态更新索引
EN

Stack Overflow用户
提问于 2019-02-17 08:15:16
回答 1查看 710关注 0票数 1

我一直在尝试动态更新数据库索引,并保持失败,卡住了几天。我正在使用angular7 & type脚本和最新的dexie版本。当我尝试使用相同的代码时,它给我错误:

有什么我应该做的来让它工作吗?谢谢!

代码语言:javascript
复制
ERROR Error: Uncaught (in promise): UpgradeError: Dexie specification of currently installed DB version is missing
UpgradeError: Dexie specification of currently installed DB version is missing

我只是在这里复制粘贴了示例代码:

代码语言:javascript
复制
 changeSchema(db, schemaChanges) {
    db.close();
    const newDb = new Dexie(db.name);
    newDb.version(db.verno + 1).stores(schemaChanges);
    return newDb.open();
  }

  // Open database dynamically:
  async playAround() {
    let db = new Dexie('FriendsDatabase');
    if (!(await Dexie.exists(db.name))) {
      db.version(1).stores({});
    }
    await db.open();

    // Add a table with some indexes:
    db = await this.changeSchema(db, { friends: 'id, name' });

    // Add another index in the friends table
    db = await this.changeSchema(db, { friends: 'id, name, age' });

    // Remove the age index again:
    db = await this.changeSchema(db, { friends: 'id, name' });

    // Remove the friends table
    db = await this.changeSchema(db, { friends: null });
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 01:42:26

这个样品有问题。我已经用一个可用的示例更新了文档:

代码语言:javascript
复制
async function changeSchema(db, schemaChanges) {
  db.close();
  const newDb = new Dexie(db.name);

  newDb.on('blocked', ()=>false); // Silence console warning of blocked event.

  // Workaround: If DB is empty from tables, it needs to be recreated
  if (db.tables.length === 0) {
    await db.delete();
    newDb.version(1).stores(schemaChanges);
    return await newDb.open();
  }

  // Extract current schema in dexie format:
  const currentSchema = db.tables.reduce((result,{name, schema}) => {
    result[name] = [
      schema.primKey.src,
      ...schema.indexes.map(idx => idx.src)
    ].join(',');
    return result;
  }, {});

  console.log("Version: " + db.verno);
  console.log("Current Schema: ", currentSchema);

  // Tell Dexie about current schema:
  newDb.version(db.verno).stores(currentSchema);
  // Tell Dexie about next schema:
  newDb.version(db.verno + 1).stores(schemaChanges);
  // Upgrade it:
  return await newDb.open();    
}

// Open database dynamically:
async function playAround() {
  let db = new Dexie ('FriendsDatabase2');
  if (!(await Dexie.exists(db.name))) {
      console.log("Db does not exist");
      db.version(1).stores({});
  }
  await db.open();
  console.log("Could open DB")

  // Add a table with some indexes:
  db = await changeSchema(db, {friends: 'id, name'});
  console.log("Could enforce friends table with id and name")

  // Add another index in the friends table
  db = await changeSchema(db, {friends: 'id, name, age'});
  console.log("Could add the age index")

  // Remove the age index again:
  db = await changeSchema(db, {friends: 'id, name'})
  console.log("Could remove age index")

  // Remove the friends table
  db = await changeSchema(db, {friends: null});
  console.log("Could delete friends table")
}

playAround().catch(err => console.error(err));

小提琴:

https://jsfiddle.net/dfahlander/jzf2mc7n/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54728942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档