使用npmjs Keyv库时出现keyv.iterator非函数错误求助
解决Keyv无法遍历所有条目的问题
问题原因
你调用的keyv.iterator()方法不存在,Keyv核心实例并未暴露该同步迭代方法,且Keyv的遍历需要使用异步迭代器,不能用普通的同步for...of循环。
解决方案
1. 使用异步迭代器遍历Keyv实例
Keyv实现了Symbol.asyncIterator接口,可直接用for await...of循环遍历实例本身,无需调用额外的iterator方法:
async function testReadDB() { const keyv = new Keyv('sqlite://test.sqlite'); const test = await keyv.get("test_key"); console.log(test); try { // 用异步循环遍历所有键值对 for await (const [key, value] of keyv) { console.log(key, value); } } catch (e) { console.log(e.message); } }
2. 确保安装对应存储适配器
若使用SQLite作为存储后端,需单独安装@keyv/sqlite适配器(Keyv核心包仅提供通用接口,具体存储后端需单独安装):
npm install @keyv/sqlite
3. 直接调用适配器原生方法(可选)
如果需要更底层的操作,可通过keyv.store访问SQLite适配器实例,调用其原生方法查询所有数据:
async function testReadDB() { const keyv = new Keyv('sqlite://test.sqlite'); const test = await keyv.get("test_key"); console.log(test); try { // 直接通过适配器查询所有条目 const allEntries = await keyv.store.all(); allEntries.forEach(({ key, value }) => { console.log(key, value); }); } catch (e) { console.log(e.message); } }
内容的提问来源于stack exchange,提问作者user3640030
相关产品推荐
相关产品推荐

