外部indexedDB请求的访问结果(在数组中)
我尝试使用以下代码获取其中一个objectStore的迭代对象的值:外部indexedDB请求的访问结果(在数组中),indexeddb,Indexeddb,我尝试使用以下代码获取其中一个objectStore的迭代对象的值: enter codefunction get_object(object){ var object = object; var obj_list = []; var transaction = db.transaction([object],"readonly"); var obj_store = transaction.objectStore(object); obj_store
enter codefunction get_object(object){
var object = object;
var obj_list = [];
var transaction = db.transaction([object],"readonly");
var obj_store = transaction.objectStore(object);
obj_store.openCursor().onsuccess = function (event){
cursor = event.target.result;
if(cursor){
console.log(cursor.value);
obj_list.push(cursor.value);
cursor.continue();
}else{
console.log("Done processing " + object + "...");
return obj_list;
}
};
}
我想做的是访问上述方法之外的obj_列表 将主要功能更改为以下内容:
function get_object(object){
return new Promise(function(resolve, reject) {
var object = object;
var obj_list = [];
var transaction = db.transaction([object],"readonly");
var obj_store = transaction.objectStore(object);
obj_store.openCursor().onsuccess = function (event){
cursor = event.target.result;
if(cursor){
console.log(cursor.value);
obj_list.push(cursor.value);
cursor.continue();
}else{
console.log("Done processing " + object + "...");
resolve(obj_list);
}
};
});
}
然后访问它:
get_object('some_object').then(function (returned_data) {
console.log(returned_data);
});
乔尼指出了正确的道路。如果您不是JS极客,不想使用承诺,不相信回调方法,那么简单的代码如下:
function get_object(object, callBack){
var object = object;
var obj_list = [];
var transaction = db.transaction([object],"readonly");
var obj_store = transaction.objectStore(object);
obj_store.openCursor().onsuccess = function (event){
cursor = event.target.result;
if(cursor){
console.log(cursor.value);
obj_list.push(cursor.value);
cursor.continue();
}else{
console.log("Done processing " + object + "...");
if (callBack && typeof(callBack) == 'function') {
callBack(obj_list);
}
return;
}
};
}
然后将其用作:
get_object("data_store", callBack);
function get_object_result_processor(resultSet){
//Do something
}
运行该代码时会发生什么?您将在cursor.onsuccess()的末尾返回obj_列表,因此我希望它是可见的。您可能需要从该函数返回承诺/延迟,然后在cursor.onsuccess中解析它,因为IndexedDB API是异步的