IndexedDB 游标

Jiř*_*ner 2 javascript indexeddb

我的问题很简单。我无法理解MDN 文章中关于从 IndexedDB 迭代结果的示例。具体来说,我看不到任何用于迭代的循环。没有 for/while/do 循环。这是示例:

function displayData() {
  var transaction = db.transaction(['rushAlbumList'], "readonly");
  var objectStore = transaction.objectStore('rushAlbumList');

  objectStore.openCursor().onsuccess = function(event) {
    var cursor = event.target.result;
    if(cursor) {
       var listItem = document.createElement('li');
       listItem.innerHTML = cursor.value.albumTitle + ', ' + cursor.value.year;
       list.appendChild(listItem);  

       cursor.continue();
    } else {
       console.log('Entries all displayed.');
    }
  };
};
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 5

“循环”是隐式发生的。游标的每次成功前进都会导致“成功”事件,这将触发对分配给请求的“onsuccess”属性的处理程序的调用。因此,迭代发生是因为这一行:

cursor.continue();
Run Code Online (Sandbox Code Playgroud)

  • @JiříLechner 该机制是异步的,因为对数据库的访问可能需要(少量)时间。 (2认同)