使用游标循环将JS对象添加到数组中
Adding JS objects to an array using a cursor loop
我正试图在IndexedDB中为客户端存储解决方案重新创建我的mySQL/PHP项目(一个"新选项卡"风格的页面,存储带有强调颜色、文件夹和快速拨号/固定部分的书签)(希望将其移到Chrome扩展)。
我喜欢认为我对JS有一个很好的理解,但我不明白为什么下面只返回一个空数组。据我所见,"response"数组是在函数的开头声明的,因此其中的从属函数应该可以访问它。在控制台日志中粘贴确实表明数组被成功地推送到由游标迭代创建的对象中,但是,一旦游标完成,响应就会为空。
// Specify index and key value OR omit for all
function getItems(ind,key) {
var response = [];
var transaction = db.transaction(["items"],"readonly");
var store = transaction.objectStore("items");
// If args are omitted - grab all items
if(!ind | !key) {
var cursor = store.openCursor();
cursor.onsuccess = function(e) {
var res = e.target.result;
if(res) {
var r = {
"name": res.value['name'],
"url": res.value['url'],
"folder": res.value['folder'],
"colour": res.value['colour'],
"dial": res.value['dial'],
"order": res.value['order']
};
response.push(r);
res.continue();
}
return response;
}
} else {
// If both args are specified query specified index
store = store.index(ind);
var range = IDBKeyRange.bound(key, key);
store.openCursor(range).onsuccess = function(e) {
var res = e.target.result;
if(res) {
var r = {
"name": res.value['name'],
"url": res.value['url'],
"folder": res.value['folder'],
"colour": res.value['colour'],
"dial": res.value['dial'],
"order": res.value['order']
};
response.push(r);
res.continue();
}
return response;
}
}
}
我是不是很愚蠢,错过了什么?
编写时:
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 */);
相关文章:
- 在函数中添加数组元素的数值
- 在Codrops的内容中添加数组元素展开缩略图网格预览
- 在javascript中动态添加数组数组
- 在 javascript 中添加数组到数组
- 如何使用推送在 JavaScript 中添加数组值
- 设置和添加数组值javascript时出现问题
- 使用 JavaScript 添加数组对象
- 将文件转换为数组并使用数据列表和选项标签为自动完成文本框添加数组元素
- 单击时将值推送到数组,然后循环添加数组值.Javascript
- 如何使用 JavaScript 更新或添加数组中的值
- 在窗体中动态添加数组文本框
- 在 javascript 中添加数组和对象会产生错误
- 如何在JavaScript中更新/添加数组的元素
- 在JavaScript中添加数组中的值
- 通过for循环添加数组值
- 如何在HTML中从Javascript添加数组的滚动列表
- Vaildate动态添加数组输入-jQuery Validate
- 在HighChart android中添加数组数据
- AngularJS:防止再次添加数组中已有的项
- 添加数组元素到现有的javascript数组