使用游标循环将JS对象添加到数组中

时间:2016-05-03 19:00:43

标签: javascript arrays indexeddb

我试图在IndexedDB中重新创建我的mySQL / PHP项目(一个"新标签"样式页面,其中存储带有强调颜色,文件夹和快速拨号/固定部分的书签)客户端存储解决方案(希望将其移至Chrome扩展程序)。

我觉得我对JS有一个很好的理解,但是我无法理解为什么以下只返回一个空数组。从我可以看到"响应"数组在函数开始时声明,因此可由其中的从属函数访问。坚持使用控制台日志确实表明数组已成功推送到光标迭代创建的对象,但是一旦光标结束,响应将保持为空。

welcome_personality_path

我是愚蠢的,在这里遗失了什么吗?

1 个答案:

答案 0 :(得分:2)

当你写:

cursor.onsuccess = function(e) {
    ...
    return response;
}

您从该匿名事件处理程序返回一个值(将被忽略)。到处理程序执行时,对getItems()本身的调用早已完成。你不能简单地return像光标迭代这样的异步操作产生的值。

请改为尝试:

function getItems(callback, ind, key) {
  var response = [];
  var transaction = db.transaction(["items"],"readonly");
  var store = transaction.objectStore("items");
  transaction.oncomplete = function() { callback(response); };

  ...
}

并将其命名为:

getItems(function(response) {
  for (var i = 0; i < response.length; ++i) {
    console.log(response[i]);
  }
} /* ind, key */);