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

迪恩·凯勒姆(Dean Kellham)

我正在尝试在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 */);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

延迟将新对象添加到循环中的数组

来自分类Dev

在C中使用for循环将数字添加到数组

来自分类Dev

Android-使用for循环将视图添加到数组

来自分类Dev

Scala:使用for循环将值添加到sortedSet或数组

来自分类Dev

使用 for 循环将项目添加到数组 Laravel

来自分类Dev

使用 for 循环将值添加到数组

来自分类Dev

将数组对象添加到对象

来自分类Dev

将数组添加到for循环

来自分类Dev

如何使用解构将数组值添加到对象?

来自分类Dev

使用jq将JSON对象添加到数组

来自分类Dev

敲除js使用json对象将值添加到数组

来自分类Dev

将值添加到对象数组

来自分类Dev

将SimpleXMLElement对象添加到数组

来自分类Dev

将PSVariable对象添加到数组

来自分类Dev

将PSCustom对象添加到数组

来自分类Dev

将空对象添加到数组

来自分类Dev

将数组对象添加到minimongo

来自分类Dev

将 var 添加到数组对象?

来自分类Dev

将 id 添加到对象数组

来自分类Dev

将多个对象添加到数组?

来自分类Dev

将字段添加到流星游标

来自分类Dev

通过此数组js将项目添加到循环中的数组

来自分类Dev

如何将新对象动态添加到 vue(对象)数据数组-Vue.js?

来自分类Dev

在angularjs的for循环中将对象添加到数组

来自分类Dev

通过Java中的循环将对象添加到数组

来自分类Dev

循环时将对象添加到数组

来自分类Dev

将File对象添加到File对象数组

来自分类Dev

将数组对象添加到数组php?

来自分类Dev

将数组中的对象数组添加到 JSON 中