req = db.openCursor();
req.customerData=new Array() //[{a:1}]
req.onsuccess = function(e) {
var cursor = e.currentTarget.result;
if (cursor) {
//console.log(cursor.value);
e.currentTarget.customerData.push(cursor.value);
e.currentTarget.customerData.push("hello?");
cursor.continue()
}
else {
console.log(e.currentTarget.customerData) //this always correct
}
}
console.log(req.customerData); //outside the onsuccess everything is gone?
console.log(req);
IndexedDB openCursor транзакция OnSuccess возвращает пустой массив
Я могу видеть customerData когда я открыть объект в хромированной консоли
console.log(req.customerData);
Но когда я делаю над ним пусто?
замена new Array()
с [{a:1}]
console.log(req.customerData);
Я могу видеть a
, а также другие объекты
, но затем agian
console.log(req.customerData[0].a);
работы и другие объекты исчезли.
Как сохранить данные клиента? Я попробовал просто нажимать цифры или текст, но то же самое после транзакции. Я не могу получить данные только отображать его на console.log() во время транзакции?
Я знаю, что это должно быть что-то мимо по ссылке, но каждая переменная, которую я забираю, исчезает?
Добавлен полный пример ниже только тип записи() и читать() в консоли
<script>
var iDB
ready=function(){
var request = indexedDB.open("my-database",1);
request.onupgradeneeded = function(e) {
var db = e.currentTarget.result
var store = db.createObjectStore("store", {keyPath: "muts", autoIncrement:false})
//store.createIndex("by_submit", "submit", {unique: false})
console.log('db upgrade', 'v'+db.version)
}
request.onerror = function(e) {
//var db = e.currentTarget.result;
//db.close()
console.error('db error ',e)
}
request.onsuccess = function(e) {
var db = e.currentTarget.result
db.onversionchange = function(e) {
db.close()
console.log('db changed', 'v'+db.version, 'CLOSED')
}
console.log('db setup', 'v'+db.version, 'OK')
}
iDB=request
}
drop=function(){
iDB.result.close()
var req = indexedDB.deleteDatabase(this.iDB.result.name);
req.onsuccess = function() {console.log("Deleted database successfully")}
req.onerror = function() {console.log("Couldn't delete database")}
req.onblocked = function() {console.log("Couldn't delete database due to the operation being blocked")}
}
read=function(){
var db=iDB
.result
.transaction(["store"], "readwrite").objectStore("store");
var req = db.openCursor();
req.iData=new Array();
req.onsuccess = function(e) {
var cursor = e.currentTarget.result;
if (cursor) {
e.currentTarget.iData.push(cursor.value);
e.currentTarget.iData.push("hello");
cursor.continue()
}
else {
console.log(e.currentTarget.iData)
}
}
console.log(req.iData)
}
write=function(){
var db=document.querySelector('my\-database')
.iDB
.result
.transaction(["store"], "readwrite").objectStore("store");
var customerData = [
{muts: "Bill", qty: "1"},
{muts: "Donna", qty: "1"}
]
for (var i in customerData){db.put(customerData[i])}
}
ready()
</script>
Глупый вопрос, но почему вы пишете данные обратно в объект запроса? Почему бы не использовать собственный массив? Я склонен рассматривать объекты запроса как это только для чтения (даже если это не так). –
Я был отчаянным ха-ха :) Пробовал все, чтобы попасть в отдельный массив. Я просто хочу переменную, которая имеет данные в ней после того, как курсор сделан. –