使用promise将回调方式变为同步等待方式

news/2025/3/18 14:59:18/文章来源:https://www.cnblogs.com/Simoon/p/18778943

应用场景:需同步获取值的时候,回调方式使用起来比较难受,并且库里内并未提供同步api,此时可使用promise+await将回调方式改为同步执行,

核心:promise+await将回调改为同步调用

 const result = await new Promise((resolve, reject) => {request.onsuccess = () => resolve(request.result);request.onerror = () => reject(false);});

原始代码:

// 通用方法 - 获取数据
export async function getCache(key) {const database = await initDB();return new Promise((resolve, reject) => {const tx = database.transaction('apiCache', 'readonly');const store = tx.objectStore('apiCache');const request = store.get(key);request.onsuccess = () => {const result = request.result;if (!result) {resolve(null); // 数据不存在return;}// 检查数据是否过期if (result.expiry < Date.now()) {deleteCache(key); // 删除过期数据resolve(null);} else {resolve(result.data);}};request.onerror = () => {reject(request.error); // 处理错误};});
}

优化后的代码:

// 通用方法 - 获取数据
export async function getCache(key) {const database = await initDB();const tx = database.transaction('apiCache', 'readonly');const store = tx.objectStore('apiCache');const request = await store.get(key);// 将 IndexedDB 请求封装为 Promiseconst result = await new Promise((resolve, reject) => {request.onsuccess = () => resolve(request.result);request.onerror = () => reject(false);});if (!result) {return null;}// 检查数据是否过期if (result.expiry < Date.now()) {await deleteCache(key); // 删除过期数据return null;}return result.data;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900956.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端中的Javascript

前端中的Javascript javascript定义方式内联JavaScript直接在HTML元素的事件属性中编写JavaScript代码<body><h1>Hello, World!</h1><button onclick="alert(Button clicked!)">Click Me</button> </body>内部JavaScript可以直接…

NVM:安装配置使用

一、简介 在实际的开发和学习中可能会遇到不同项目的 node 版本不同,而出现的兼容性问题。 而 nvm 就可以很好的解决这个问题,它可以在同一台机器上下管理多个 node 版本,使得程序员可以轻松地安装、卸载和切换不同的 node 版本。 在下载和配置 nvm 前,需要在控制面板中先删…

硬盘科普,M.2,PCI-E,NVMe 傻傻分不清

首先从三个层面去理解这个问题:物理接口,通道,协议 1:物理接口(相当于通讯中的电,光口) 大白话- 物理规格,像是 公路,铁路 专门跑PCI-E通道的那个物理接口:扩展性极强,可以插显卡的PCI-E X16的那个物理接口,或者插网卡,声卡的那个PCI-E X1那个物理接口,都是属于一类…

第二届长城杯ciscn半决赛awdp pwn以及应急响应wp

这次半决赛还真是状况频出,先是上午全场靶机断联了2轮,下午的应急又在坐大牢,还好是后面捋顺了逻辑做出来了,下半场干了个赛区第二,总成绩第四,这回是真燃尽了 上半场AWDP typo fix 一开始一直在改这道结果后面才发现那个prompt是真的好改,白浪费了3轮。。。 进入程序是…

LLM Assistance for Memory Safety

LLM Assistance for Memory SafetyMohammed, Nausheen, et al. "LLM Assistance for Memory Safety." 2025 IEEE/ACM 47th International Conference on Software Engineering (ICSE). IEEE Computer Society, 2024.Introduction 在软件安全的漏洞中,内存安全是主要…

『Plotly实战指南』--折线图绘制进阶篇

上一篇介绍了Plotly绘制折线图的基础知识和数据预处理的技巧, 本文将重点探讨如何利用Plotly实现多线折线图的布局设计以及动态折线图的实现, 让我们一起掌握进阶的折线图绘制技巧。 1. 多折线图布局 在实际的数据分析场景中,常常需要同时展示多组数据,例如对比不同产品的销…

使用gradio快速实现聊天机器人

我们可以使用gradio库通过低代码的方式快速实现聊天机器人界面及交互: import gradio as gr from ollama import chatdef predict(message,history):stream = chat(model="deepseek-r1:1.5b",messages=[{"role":"user","content":mess…

Edge浏览器登录微软账户报错0x80190001的解决办法

问题 0x80190001是什么错误?有用户在Edge浏览器上登录微软账户遇到了这个错误代码,这是什么意思?要如何解决呢?一个比较靠谱的解决办法解决方式1、下载一个finder(抓包软件)官网下载地址(最新版本):https://www.telerik.com/download/fiddler2、直接安装就好,选择左上…

2025年项目管理软件革命:7大工具重新定义团队协作

本文深度解析2025年项目管理工具的技术革新与市场格局,聚焦AI、量子计算、混合现实等技术对团队协作模式的颠覆性影响。一、2025年项目管理生态的三大颠覆性变化 在生成式AI、量子计算与混合现实技术推动下,项目管理工具正经历三大变革:决策权转移:AI从辅助工具升级为“虚拟…

【前瞻技术布局】京东零售广告创意:引入场域目标的创意图片生成

作者:京东零售 冯伟WWW2025: CTR-Driven Advertising Image Generation with Multimodal Large Language Models 论文链接:https://arxiv.org/pdf/2502.06823 代码链接:https://github.com/Chenguoz/CAIG 摘要:在电商平台中,广告图片对于吸引用户注意力和提高广告效果至关…

【达达秒送】AI运营视觉设计实战总结

作者:京东零售 刘潇蔓 全篇将从4个方面为大家系统介绍,我们如何使用AI,在运营活动中使用技法提质提效的… 1、AI在运营设计中的优势2、典型应用场景&案例3、AI工具核心关键词公式4、避坑指南:AI落地问题

vue3 slot 具名插槽

一、情景 一个组件用多个子组件,子组件样式相同 二、作用 父组件传递数据和格式给子组件 三、语法 1、子组件(挖坑)<slot name="title">默认标题</slot> <slot name="content">默认内容</slot>2、父组件(填坑) 用语法糖 #<Cat…