Javascript IDBFactory.onsuccess vs IDBFactory.oncomplete

Javascript IDBFactory.onsuccess vs IDBFactory.oncomplete,javascript,google-chrome-extension,indexeddb,Javascript,Google Chrome Extension,Indexeddb,复习了很多教程,并尝试了一些东西 看到很多教程显示 window.indexeddb = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; window.transaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction; window.keyrang

复习了很多教程,并尝试了一些东西

看到很多教程显示

window.indexeddb = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
window.transaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
window.keyrange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange
if (!window.indexedDB) {
    window.alert("Your browser doesn't support a stable version of IndexedDB.")
}     
var db;
var opendatabase = window.indexeddb.open("mydatabase", 1);
opendatabase.onsuccess = function(event) {
    db = event.target.result;
    console.log("opendatebase.onsuccess: "+ db);
    somefunction();
};
然后直接对indexeddb进行读写操作

是否应将.onsuccess更改为.oncomplete

opendatabase.oncomplete = function(event) {
    db = event.target.result;
    console.log("opendatebase.onsuccess: "+ db);
    somefunction();
};
我假设opendatabase.oncomplete在完全打开连接后被触发

或者在所有事务完成后是否激发opendatabase.oncomplete。就在db.close()之前

================

这更倾向于chrome扩展。我们有一个24/7的开放连接很可能是个坏主意。如果indexeddb是通过javascript从给定网站创建的,则会发送到浏览器。并且只有InXedDB在您访问该网站时才会打开。听起来不错

但我质疑是否有24/7的开放数据库连接和chrome扩展。我想确保所有对数据库的写入都已完成。在调用db.close之前。从关闭选项卡到关闭浏览器并关闭设备

致力于多对象存储。以及在任何给定时间处理查询和对多对象存储的写入。如果发生不正确的关机。而且只有部分数据被写入objectstore_A,但在下次启动时永远没有机会写入objectstore_B,因此数据可能会损坏并失去同步


成功上的链接

onsuccess
与请求相关,而as
oncomplete
与事务相关

在您的示例中,
opendatabase
是一个IDOpenDBRequest,没有
oncomplete
事件


(虽然大多数情况下,您的“请求”都是针对“事务”进行的,但打开与不需要升级的数据库的连接是请求不涉及事务的少数情况之一)
onsuccess
与请求相关,而as
oncomplete
与事务相关

在您的示例中,
opendatabase
是一个IDOpenDBRequest,没有
oncomplete
事件


(虽然大多数情况下,您的“请求”都是针对“事务”进行的,但打开一个不需要升级的数据库连接是在不涉及事务的情况下发出请求的少数实例之一)

解决了这个问题。可以为opendatabase调用上的WARE oncomplete。以及关闭数据库的能力。仍然在学习indexeddb丑陋的原始代码并将其提交给内存yikes会让一些阅读与indexeddb的承诺和回调、收益率以及同步与异步混淆。以及如何找出错误,而不让它们在}结尾处消失或在链上传播

function c(){
    var myadd1 = {id : 1, something : something};
    //1c
    var opendatabase = window.indexedDB.open("mydatabase");
    //2c
    opendatabase.onerror = function(event) {
        console.error("error opening database = " + event)
    }
    //3c
    opendatabase.onblocked = function (event) {
        console.error("error = " + event.target + " close all other open tabs")
    } 
    //4c
    opendatabase.onupgradeneeded = function(event) {
        // i forgot about this on copy past. not number for this
        var mydatabase = db.createObjectStore("mystore",  {autoIncrement: true, unique :true }); 
        mydatabase.onerror = function(event){
            console.error("mydatabase.error = " + event);
        }
        mydatabase.onsuccess = function(event){
            console.log("mydatabase.onsuccess");
        }
        mydatabase.oncomplete = function(event){
            console.log("mydatabase.oncomplete");
        }
    }
    //5c
    opendatabase.onversionchange = function(event) {
        //db.close();
        alert("A new version of this page is ready. Please close all browser tabs and browser windows and restart your browser!");
    }
    //6c
    opendatabase.onsuccess = function(event) {
        var db = event.target.result;
        console.log("opendatebase.onsuccess: "+ db);
        //7c
        var transaction = db.transaction('mystore', "readwrite");
        //8c
        transaction.onerror = function(event) {
            console.error("trasaction error = " + event);
        }
        //9c
        transaction.onsuccess = function(event){
            console.log("transaction.onsuccess");
            //10c
            var objectStore = transaction.objectStore('mystore');
            //11c
            objectStore.onerror  = function (event) { 
                console.error("objectStore error =" + event );
            }
            //12c
            objectStore.onsuccess = function(event){      
                console.log("objectStore.onsuccess");
                //13c
                var request = objectStore.add(myadd);
                //14c
                request.onerror = function (event) { 
                    console.error("request.add error =" + event);
                }
                //15c
                request.onsuccess = function(event){ 
                    console.log("request.onsuccess");
                    console.log("mysave onsuccess");    
                }
                //16c
                request.oncomplete = function(event) {
                    console.log("request.oncomplete");
                }
            }
            //17c
            objectStore.oncomplete = function(event) {
                console.log("objectStore.oncomplete");
            }
        }
        //18c
        transcation.oncomplete = function(event) {
            console.log("transcation.oncomplate");
        }
    }
    //19c
    opendatabase.oncomplete = function(event){
        console.log("opendatabase.oncomplate");
        var db = event.target.result;
        db.close();
    }
}

我明白了。可以为opendatabase调用上的WARE oncomplete。以及关闭数据库的能力。仍然在学习indexeddb丑陋的原始代码并将其提交给内存yikes会让一些阅读与indexeddb的承诺和回调、收益率以及同步与异步混淆。以及如何找出错误,而不让它们在}结尾处消失或在链上传播

function c(){
    var myadd1 = {id : 1, something : something};
    //1c
    var opendatabase = window.indexedDB.open("mydatabase");
    //2c
    opendatabase.onerror = function(event) {
        console.error("error opening database = " + event)
    }
    //3c
    opendatabase.onblocked = function (event) {
        console.error("error = " + event.target + " close all other open tabs")
    } 
    //4c
    opendatabase.onupgradeneeded = function(event) {
        // i forgot about this on copy past. not number for this
        var mydatabase = db.createObjectStore("mystore",  {autoIncrement: true, unique :true }); 
        mydatabase.onerror = function(event){
            console.error("mydatabase.error = " + event);
        }
        mydatabase.onsuccess = function(event){
            console.log("mydatabase.onsuccess");
        }
        mydatabase.oncomplete = function(event){
            console.log("mydatabase.oncomplete");
        }
    }
    //5c
    opendatabase.onversionchange = function(event) {
        //db.close();
        alert("A new version of this page is ready. Please close all browser tabs and browser windows and restart your browser!");
    }
    //6c
    opendatabase.onsuccess = function(event) {
        var db = event.target.result;
        console.log("opendatebase.onsuccess: "+ db);
        //7c
        var transaction = db.transaction('mystore', "readwrite");
        //8c
        transaction.onerror = function(event) {
            console.error("trasaction error = " + event);
        }
        //9c
        transaction.onsuccess = function(event){
            console.log("transaction.onsuccess");
            //10c
            var objectStore = transaction.objectStore('mystore');
            //11c
            objectStore.onerror  = function (event) { 
                console.error("objectStore error =" + event );
            }
            //12c
            objectStore.onsuccess = function(event){      
                console.log("objectStore.onsuccess");
                //13c
                var request = objectStore.add(myadd);
                //14c
                request.onerror = function (event) { 
                    console.error("request.add error =" + event);
                }
                //15c
                request.onsuccess = function(event){ 
                    console.log("request.onsuccess");
                    console.log("mysave onsuccess");    
                }
                //16c
                request.oncomplete = function(event) {
                    console.log("request.oncomplete");
                }
            }
            //17c
            objectStore.oncomplete = function(event) {
                console.log("objectStore.oncomplete");
            }
        }
        //18c
        transcation.oncomplete = function(event) {
            console.log("transcation.oncomplate");
        }
    }
    //19c
    opendatabase.oncomplete = function(event){
        console.log("opendatabase.oncomplate");
        var db = event.target.result;
        db.close();
    }
}