Javascript IndexedDB出现JayData saveChanges()错误

Javascript IndexedDB出现JayData saveChanges()错误,javascript,indexeddb,jaydata,Javascript,Indexeddb,Jaydata,从IndexedDb删除数据时遇到问题。这些方法在WebSql中运行良好,但在IndexedDb中抛出错误。最初的人口似乎工作正常 Chrome中存在此错误: Uncaught TypeError: Cannot read property 'ABORT_ERR' of undefined IndexedDbProvider.js:627 self.db.transaction.setCallbacks.onerror 代码已移动到 值得注意的是,只要调用remove(),就不会出现错误。当我

从IndexedDb删除数据时遇到问题。这些方法在WebSql中运行良好,但在IndexedDb中抛出错误。最初的人口似乎工作正常

Chrome中存在此错误:

Uncaught TypeError: Cannot read property 'ABORT_ERR' of undefined IndexedDbProvider.js:627
self.db.transaction.setCallbacks.onerror
代码已移动到

值得注意的是,只要调用
remove()
,就不会出现错误。当我尝试
saveChanges()
时,该错误似乎只会发生

既然我(可能)已经注意到你的注意力是
toArray
forEach
同步的?这样我就可以减少save?dvContext.Data.remove(数据)上的事务,这只是一个输入错误吗?应该是dContext.Datas.remove(数据)

JayData的一些函数是sync,而其他方法是异步的,但以逻辑方式:) 当JayData接触本地数据库或通过网络调用远程方法时,这些函数是异步的。让我们看一下您的代码:

 dContext.Datas
是一个筛选器(可查询),它选择所有记录,只要您只构建该筛选器,调用都是同步的,所以

dContext.Datas.filter().take().skip().orderBy().map()
只需在内存中建立过滤器,而不执行任何其他操作,以便它们都是同步的,然后:

dContext.Datas.toArray()
toArray触发实际操作,执行查询,这里我们必须接触本地数据库,因此它是异步的,当它完成时,它可以调用回调函数或解析它先前返回的承诺

这同样适用于remove,它只是将记录放入一个集合(因此是同步的),而saveChanges()执行真正的工作(它是异步的)

您的问题是toArray同时具有回调函数和then分支,因此这两个分支都将被并行调用,then分支不会等待回调的完成。解决方案:

dContext.Datas.toArray()
.then(function(data) {
     // your removes in a loop
     // important: return the promise
     return dContext.saveChanges();
})
.then(function() {
     // whatever
})

另外,当JayData返回数据并使用forEach删除数据时,它是纯javascript和synchey Gabor,我编写了一个提琴来演示(您必须运行两次才能看到错误)您的原始(有缺陷)代码导致错误,但JayData的错误处理部分失败,因为错误代码已被删除:(另外,您不必手动设置提供程序,“local”将选择可用的最佳本地提供程序您好,我已经做了您建议的更改,很有意思的是,在执行save之前,remove会一直保存在内存中。我仍然会收到相同的错误。这是一个更新的提琴(抱歉,忽略此内容,我没有看到您的评论!)