当前位置: 首页 > news >正文

内网网站建设方案广州如何注册公司流程图

内网网站建设方案,广州如何注册公司流程图,湖州城市投资建设集团网站,在线网站创做简历最近俺在接触 Chrome 插件开发,需要把一个数据存放到浏览器的存储中。这个数据结构有点复杂,它包含一个 Map 和一个数组。我使用 chrome.storage.local API来存储这个数据,然后在另一个地方获取数据。保存数据的代码并没有报错,但…

最近俺在接触 Chrome 插件开发,需要把一个数据存放到浏览器的存储中。这个数据结构有点复杂,它包含一个 Map 和一个数组。我使用 chrome.storage.local API来存储这个数据,然后在另一个地方获取数据。保存数据的代码并没有报错,但是俺发现获取的时候获取结果的内容为空,这是为什么呢?

下面是我封装的保存数据和获取数据的方法:

// 要存储的数据结构
const mindDataObj = {keywordMap: new Map(),mindDataArr: []
};/*** 获取存储对象* @param {string} key 存储对象的键* @returns {Promise<Object>} 返回一个包含存储对象的 Promise*/
export async function getObject(key) {return new Promise((resolve, reject) => {chrome.storage.local.get([key], (result) => {if (chrome.runtime.lastError) {return reject(chrome.runtime.lastError)}resolve(result[key] || {})})})
}/*** 保存存储对象* @param {string} key 存储对象的键* @param {Object} obj 要保存的对象* @returns {Promise<void>} 返回一个 Promise,表示操作完成*/
export async function saveObject(key, obj) {return new Promise((resolve, reject) => {chrome.storage.local.set({ [key]: obj }, () => {if (chrome.runtime.lastError) {return reject(chrome.runtime.lastError)}resolve()})})
}

为什么会这样?

经过查找资料发现,chrome.storage.local 的存储机制只能存储和检索序列化的 JSON 对象,虽然JSON可以很好地处理对象和数组,但对于MapSet等ES6中引入的复杂数据结构,JSON是无法直接序列化和反序列化的。因此,尽管你可能没有在保存数据时遇到错误,但在尝试读取非JSON兼容类型的数据时,这些数据将因无法被正确序列化而丢失。

解决方案

总之一句话:chrome.storage.local 只能存储 JSON 兼容的数据类型(如对象、数组、字符串、数字等),MapSet 需要转换为对象或数组才能正确存储。在这里,我们通过 chrome.storage.local 存储时需要先进行序列化处理,而在读取时需要进行反序列化处理。

步骤1: 序列化和反序列化Map对象

我们先增加两个方法做序列化的处理,serializeMapdeserializeMap 方法用于将 Map 对象转换为数组,从而可以存储在 chrome.storage.local 中,并在读取时将其转换回 Map 对象。

/*** 序列化Map对象* @param {Map} map 要序列化的Map对象* @returns {Object} 序列化后的对象*/
function serializeMap(map) {return Array.from(map.entries());
}/*** 反序列化Map对象* @param {Array} entries 序列化后的对象* @returns {Map} 反序列化后的Map对象*/
function deserializeMap(entries) {return new Map(entries);
}

步骤2: 存储和读取数据

然后再增加操作数据的方法,saveMindDatagetMindData 方法用于保存和获取 mindDataObj 格式的数据,包括序列化和反序列化步骤。

/*** 保存mindDataObj格式的数据* @param {string} key 存储对象的键* @param {Object} initMindDataObj 要保存的对象* @returns {Promise<void>} 返回一个 Promise,表示操作完成*/
export async function saveMindData(key, mindDataObj) {const serializedData = {keywordMap: serializeMap(mindDataObj.keywordMap),mindDataArr: mindDataObj.mindDataArr};await saveObject(key, serializedData);
}/*** 获取mindDataObj格式的数据* @param {string} key 存储对象的键* @returns {Promise<Object>} 返回一个包含mindDataObj格式数据的 Promise*/
export async function getMindData(key) {const serializedData = await getObject(key);const mindDataObj = {keywordMap: deserializeMap(serializedData.keywordMap || []),mindDataArr: serializedData.mindDataArr || []};return mindDataObj;
}
http://www.yayakq.cn/news/463227/

相关文章:

  • 哈尔滨网站建设方案维护做电影资源缓存网站教程
  • 中小企业建网站哪个好快速建站的公司
  • 涉县做网站淄博培训网站建设
  • 瑞安市建设工程质量监督站网站随便建设网站犯法吗
  • 怎么自己做论坛网站吗专业网站建设定制
  • 网站正在建设中 html受欢迎的网站开发
  • 嘉兴企业网站模板建站网站查询地址
  • 个人如何办网站wordpress4.9标签404
  • 阿里云 域名 做网站冯提莫斗鱼前在哪个网站做直播
  • 蓝色科技企业网站模板爱前端wordpress5.0.3主题
  • 网站线框图用什么做网站开发技术课程设计说明书
  • 网站建设明细报价单wordpress 媒体库 显示
  • 建筑业务网站建设云南网站建设找天软
  • 网站建设活动wordpress添加弹窗
  • 门户手机网站开发体育网站建设规划
  • 有哪些建设工程类网站网站 建设 步骤是
  • 绩溪住房建设网站wordpress美化下载页面
  • 房地产网页设计网站建设大连网站设计哪个最好
  • vs中做网站设置背景图片多屏合一网站建设
  • 网站建设需要购买服务器么盛盾科技网站建设
  • .win域名做网站怎么样网页前端设计师培训学校
  • 中山建站装饰设计的变形手法有哪些
  • 东莞网站建没如何用 ftp上传网站
  • 如何在网站做引流凡科app制作
  • 壹搜网站建设网络营销的主要方式和技巧
  • 产品包装设计公司网站大数据下的精准营销
  • 化妆品企业网站建设的缺点网站源码下载后怎么用
  • 中国广告网站电子商务旅游网站建设策划书
  • 陕西省门户网站建设政策网站建设代码介绍
  • 网站优化有哪些类型中国铁路建设投资公司网站熊学军