dexie 的返回值有资格作为对象,但它不是
Posted
技术标签:
【中文标题】dexie 的返回值有资格作为对象,但它不是【英文标题】:Returned value from dexie qualifies as object, but then it isn't 【发布时间】:2021-12-30 04:36:36 【问题描述】:我用 dexie.js 创建了一个对象存储,并用这样的空对象填充它:
db.version(1).stores(
status: 'id, settings' // only one entry, no need to auto-increment
)
// Add initial data
db.on("populate", () =>
db.status.add(
id: 0,
settings:
)
)
稍后,Nuxt 2 将使用来自服务器的数据填充“设置”。但是,我需要检查每条路由,如果 settings
对象首先包含值,然后再启动对数据库的调用。因此,我得到了“状态”对象库并检查了dbStatusSettings instanceof Object
。当“单独”完成时,这评估为真;但在“if”条件的上下文中,会返回错误:
// default.vue
async checkIfSettingsExist()
const dbStatus = await db.status.get(0);
const dbStatusSettings = await dbStatus.settings
// this returns true
console.log(dbStatusSettings instanceof Object)
// however, here I get the error message (see below)
if ((dbStatusSettings instanceof Object) && Object.keys(dbStatusSettings.keys).length > 0)
// Found data in indexddb's "status.settings", so save it to VueX
this.$store.commit('status/updateSettings', dbStatusSettings)
// Leave function
return;
这是返回的错误信息:
default.vue?ec86:190 Uncaught (in promise) TypeError: Cannot convert undefined or null to object
第 86 行指的是async checkIfSettingsExist()
。
我不明白,为什么 JS 刚刚证明自己可以处理一个对象,却突然抱怨将“未定义”转换为对象。
我在这里误解了什么?我的错误是什么?
【问题讨论】:
【参考方案1】:再次发生,发布后最多只需要半个小时,我自己发现了错误。
这个:Object.keys(dbStatusSettings.keys).length
当然应该是
这个:Object.keys(dbStatusSettings).length
我很惭愧,但我还是把这篇文章留了下来以备将来参考。
【讨论】:
以上是关于dexie 的返回值有资格作为对象,但它不是的主要内容,如果未能解决你的问题,请参考以下文章