封装 indexedDB(七)删除对象

关系型数据库,一般会涉及到是物理删除,还是逻辑删除,而对象数据库,大概直接删掉就好了。

所以简单一点,直接删掉就好。

删除对象

相当于关系型数据库里的删除记录。indexedDB的步骤是:

  • 打开数据库
  • 开启事务
  • 打开对象仓库(表)
  • 删除对象

打开数据库的操作,在help里面已经实现了。
开启事务,可以通过help开启,也可以不显性开启,而是默认开启,然后就是开仓库装对象了。

/**
 * 删除对象
 * @param { IndexedDBHelp } help 访问数据库的实例
 * @param { string } storeName 仓库名称(表名)
 * @param { string|number } id  
 * @param { IDBTransaction } tranRequest 如果使用事务的话,需要传递开启事务时创建的连接对象
 * @returns 添加记录的ID
 */
export default function deleteData (help, storeName, id, tranRequest = null) {
  // 定义一个 Promise 的实例
  return new Promise((resolve, reject) => {
    // 定义个函数,便于调用
    const _delete = (__tran) => {
      __tran
        .objectStore(storeName) // 获取store
        .delete(id) // 删除一个对象
        .onsuccess = (event) => { // 成功后的回调
          resolve(event.target.result)
        }
    }
    // 判断数据库是否打开
    if (tranRequest === null) {
      help.beginWrite([storeName]).then((tran) => {
        _delete(tran)
      })
    } else {
      _delete(tranRequest)
    }
  })
}

使用方式

// 引入help
import { deleteModel } from '../../../packages/websql.js'

/**
 * 实现删除服务
 * @param {object} userInfo 当前登录人的信息
 * @param {object} help 访问数据库的实例
 * @param {objec} info 服务的 meta
 * @param {object} model 占位用
 * @param {number|string} id 记录ID
 * @returns 返回影响的行数
 */
export default function del (userInfo, help, info, model, id) {
  return new Promise((resolve, reject) => {
    deleteModel(help, info, id).then((count) => {
      resolve( count )
    }).catch((err) => {
      reject(err) // '删除数据出错!'
    })
  })
}

添加、修改、删除,一样的套路,便于修改维护,和使用,而且还可以支持事务。

开启一个事务,然后进行连续的操作。

好吧,事务参数应该改一下。

源码

https://gitee.com/naturefw/nf-plat-vite2-vue3

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容