使用await调用IndexedDB的get方法未返回对象,如何正确获取文本对象?
解决IndexedDB中使用await获取数据的问题
你的代码直接await了get()方法的返回值,但IndexedDB的get()返回的是IDBRequest对象,它并非Promise类型,所以await无法等待请求完成,直接返回了这个请求对象。
要通过await获取目标数据,需要把IDBRequest包装成Promise,监听它的成功和失败事件:
async function Get() { // 获取目标对象存储 const store = db.result.transaction('Store1', 'readwrite').objectStore('Store1'); // 将get请求包装为Promise const dataset = await new Promise((resolve, reject) => { const request = store.get(5); request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error); }); console.log(dataset); }
如果需要多次调用,可以封装一个通用工具函数:
function idbRequestToPromise(request) { return new Promise((resolve, reject) => { request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error); }); } async function Get() { const store = db.result.transaction('Store1', 'readwrite').objectStore('Store1'); const dataset = await idbRequestToPromise(store.get(5)); console.log(dataset); }
额外提示:如果只是读取数据,不需要使用readwrite模式,改用readonly模式能提升性能:
const store = db.result.transaction('Store1', 'readonly').objectStore('Store1');
内容的提问来源于stack exchange,提问作者Cymro
相关产品推荐
相关产品推荐

