You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:12:04