IndexedDB和异步响应

IndexedDB and asynchronous response

本文关键字:响应 异步 IndexedDB      更新时间:2023-09-26

我正在阅读一篇关于IndexedDB的教程,但我有一些疑问。

将您的WebSQL数据库迁移到IndexedDB

看看这个代码

function showAll() {
  document.getElementById("ourList").innerHTML = "";
  var request = window.indexedDB.open("todos");
  request.onsuccess = function(event) {
    // Enumerate the entire object store.
    var ul = document.createElement("ul");
    var db = todoDB.indexedDB.db;
    var trans = db.transaction("todo", 'readonly');
    var request = trans.objectStore("todo").openCursor();
    request.onsuccess = function(event) {
      var cursor = request.result;
      // If cursor is null then we've completed the enumeration - so update the DOM
      if (cursor) {
        var li = document.createElement("div");
        li.textContent = "key: " + cursor.key + " => Todo text: " + cursor.value.text;
        ul.appendChild(li);
        cursor.continue();
      }
      else {
        document.getElementById("ourList").appendChild(ul);
      }
    }
  }
}

我每次都会看到,在我对对象调用操作/方法之前,比如这个

var request = trans.objectStore("todo").openCursor();

然后,只有在调用了操作之后,我才设置onsuccess方法

request.onsuccess = function(event) {

这是怎么回事?一旦返回请求,我如何确保该方法已经在运行,并且我必须设置onsuccess回调?

您是否在问,在定义对象之后,如何为对象定义成功处理程序?如果是这样的话,它就是有效的。(浏览器足够聪明,可以知道,如果在执行打开光标的行到定义处理程序的位置之间的几毫秒内,光标被打开了,那么它应该会自动触发处理程序。