如何正确访问INDEXEDDB getAll请求返回的结果数组内容
问题1:如何获取结果数组中的字段值
你获取不到字段的核心原因是:getAll()查询的结果不会直接挂载在IDBRequest对象上,而是存储在IDBRequest的result属性中。
结合你提供的返回结构,字段的读取层级如下:
- 第一层:
event.target.result是getAll返回的根数组 - 第二层:
event.target.result[0]是你实际存储的游戏数据集合(这里多了一层数组嵌套属于你存入数据时的逻辑问题,正常场景下不需要这一层) - 第三层:遍历集合中的每个对象,即可读取对应字段,比如
event.target.result[0][0].team1Name就能拿到你示例中的"TeamOne"值
问题2:正确的操作方式是什么
完整的查询、读取、渲染逻辑如下,同时补充了异常判断避免报错:
objectStore.getAll().onsuccess = function(event) { console.log("getAll Success"); let list = document.querySelector('.gList'); list.innerHTML = `<li>加载中...</li>`; const getRequest = event.target; // 异常判断:先处理请求错误场景 if (getRequest.error) { list.innerHTML = `<li>数据加载失败,请重试</li>`; console.error('IndexedDB读取错误:', getRequest.error); return; } // 读取结果,适配你当前的二维数组结构 const allResult = getRequest.result; const gameList = allResult?.[0] || []; list.innerHTML = ''; // 空数据处理 if (gameList.length === 0) { list.innerHTML = `<li>暂无存储的比赛数据</li>`; return; } // 遍历渲染列表,读取对应字段 gameList.forEach(gameItem => { const liEl = document.createElement('li'); liEl.innerText = `比赛时间:${gameItem.gameDate} ${gameItem.gameTime} | ${gameItem.team1Name} VS ${gameItem.team2Name}`; list.appendChild(liEl); // 需要其他字段直接从gameItem中读取即可,比如gameItem.gameID、gameItem.gameCompleted }); };
补充说明:正常使用IndexedDB存储对象时,getAll()会直接返回所有存储对象组成的一维数组,不需要多一层[0]读取,建议检查你的数据写入逻辑,避免不必要的嵌套层级。
内容的提问来源于stack exchange,提问作者SenorMogul
相关产品推荐
相关产品推荐

