当前位置: 首页 > 知识库问答 >
问题:

我似乎从IndexedDB索引中得到了一个肮脏的读数。这可能吗?

邢凌
2023-03-14

我有一些js使用readwrite事务对IndexedDB(在Chrome中)执行put,然后使用索引和readonly事务立即从相同的IndexedDB对象存储区查询。有时,我得到的结果不包括从我的put和其他时间他们的变化。IndexedDB中是否准备好了这样的脏内容?有办法避免吗?

可能是因为我使用了两个不同的TXN,而应该只使用一个(原因是这些调用实际上是api的一部分,该api将puts和查询分离到不同的api调用中,每个调用都有自己的TXN)?不过,似乎第一个txn应该在我的第二个开始之前完成和承诺。

我的伪代码如下所示:

var txn = idb.transaction([DOC_STORE], "readwrite");
var putRequest = txn.objectStore(DOC_STORE).put(myDoc);
putRequest.onsuccess = function (e) {
    var txn2 = idb.transaction([DOC_STORE], "readonly");
    var store = txn2.objectStore(DOC_STORE);
    var anotherRequest=store.index.openCursor();
    .... walk the cursor here. Sometimes I don't see my changes from my put
};

共有1个答案

宇文德明
2023-03-14

您必须等待写入事务完成。它比请求成功事件来得晚。

var txn = idb.transaction([DOC_STORE], "readwrite");
var putRequest = txn.objectStore(DOC_STORE).put(myDoc);
txn.oncomplete = function (e) {
    var txn2 = idb.transaction([DOC_STORE], "readonly");
    var store = txn2.objectStore(DOC_STORE);
    var anotherRequest=store.index.openCursor();
    .... walk the cursor here. You will see see your all changes from your put
};

或者,您可以在同一事务中使用请求成功。

var txn = idb.transaction([DOC_STORE], "readwrite");
var putRequest = txn.objectStore(DOC_STORE).put(myDoc);
putRequest.onsuccess = function (e) {
    var store = txn.objectStore(DOC_STORE);
    var anotherRequest=store.index.openCursor();
    .... walk the cursor here. You will see see your all changes from your put
};
 类似资料:
  • 所讨论的计划是: 我有一个全局变量和一个用于的宏,它指定要加起来的数字。 函数void*counting\u函数(void*arg)只是将偏移量添加到sum

  • 出于某种原因,在每秒27个请求的情况下,我们开始发现okhttp有时会出现问题,我们注意到每个主机的请求限制为5个。我们正在讨论的api有时会出现问题/超时等。 我注意到我们没有在超时时取消请求,它们似乎仍在飞行中。(即。我想开始使用RealCall.cancel) 在调查这件事的过程中。取消呼叫引擎。取消()如果引擎不为null,则调用streamAllocation。cancel()调用以下代

  • 我有一个模式: 当我尝试使用save()方法保存数据时,用户名中有索引,然后它会出现以下错误: {[MongoError:E11000重复键错误索引:testdb.registerinfos.$username_1重复键:{:null}]name:'MongoError',err:'E11000重复键错误索引:testdb.registerinfos.$username_1重复键:{:null},

  • 我正在尝试使用联系表单7创建一个自然语言风格的联系表单,但似乎无法使我的标签和字段对齐。每一个都显示在单独的行上,而不是相邻的。尝试了几种不同的CSS技巧,但都没有奏效。有人帮忙吗? 我试过左右浮动字段,我试过使用div使它们在同一条线上。 我的名字是[text your-name],我正在寻找[select TypeofMortgage“桥接融资”“拍卖融资”“翻新融资”“开发融资”]一个价值英

  • 我是Spock测试框架的新手,我试图为我正在工作的一个android项目做一些测试。我目前测试的这些对象是PJO,所以可以用常规的Spock测试它们。出于某种原因,我一直在我的一个对象上调用isAlive方法,但我知道它被调用了,感觉我已经在调试器中运行了它,它被调用了。所以我希望有人能引导我知道我做错了什么。 下面是我的测试代码: 任何帮助都将不胜感激。我已经在我能想到的每种配置中尝试过了...

  • handlePageChange是从onclick()调用的,但似乎activepage更新发生得很晚(似乎我滞后了一个),如果我转到第2页,我的activepage的状态变量将显示1