Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在indexedDb中添加多个对象的正确方法?_Javascript_Html_Indexeddb - Fatal编程技术网

Javascript 在indexedDb中添加多个对象的正确方法?

Javascript 在indexedDb中添加多个对象的正确方法?,javascript,html,indexeddb,Javascript,Html,Indexeddb,我有以下要添加到indexedDb的对象数组: const data = [ { name: 'abc', color: 'blue' }, { name: 'xyz', color: 'red' }, { name: 'yui', color: 'black' }]; 现在,我创建数据库并将此数据插入存储,如下所示: if (!db.objectStoreNames.contains("people")) {

我有以下要添加到indexedDb的对象数组:

const data = [
    { name: 'abc',
      color: 'blue'
    },
    { name: 'xyz',
      color: 'red'
    },
    { name: 'yui',
      color: 'black'
    }];
现在,我创建数据库并将此数据插入存储,如下所示:

if (!db.objectStoreNames.contains("people")) {
        peopleStore = db.createObjectStore("people", { keyPath: "name" });
        peopleStore.createIndex("color", "color", { unique: false });

        peopleStore.transaction.oncomplete = function(event) {
            data.forEach(function(data) {
                operations.add(data);
            });
        };
    }
我已经用
add()
(在
const operations
中)方法定义了一个函数表达式,如下所示:

add: function(data) {
            let request = db
                .transaction(["people"], "readwrite")
                .objectStore("people")
                .add(data);
        }
下面是我的问题:

  • 是不是每次使用add()方法时都会创建一个新事务 正在调用或正在将所有数据插入单个事务中

  • 如果它每次都创建一个新的事务,我怎么能只 1个事务以提高性能并在中执行所有操作 它只是。我猜我必须用 事务并对其执行操作(还有其他方法,如
    edit()
    delete()
    ,等等,其中每个方法都有一个“
    request
    ”变量,用于定义事务,类似于我上面所示的方法)。 我是否应该创建一个如下所示的全局变量:

  • if (!db.objectStoreNames.contains("people")) {
            peopleStore = db.createObjectStore("people", { keyPath: "name" });
            peopleStore.createIndex("color", "color", { unique: false });
    
            peopleStore.transaction.oncomplete = function(event) {
                data.forEach(function(data) {
                    operations.add(data);
                });
            };
        }
    
    const globalTrans=db.transaction([“people”],“readwrite”).objectStore(“people”)

  • 创建新事务是一项成本高昂的操作吗

  • 提前感谢所有花时间回复的人!:)

    创建全局变量将产生问题。可能是某个事务正在运行,而对于另一个操作,您可能会覆盖它

    e、 g-

    有很多方法可以解决这个问题-

  • 根据场景创建多个方法-
  • 修改函数以仅接收数组值-

  • 希望这能回答您的问题。

    请注意。。。在您的
    函数addMultiple(data,callback)
    此行
    let request=tx.objectStore(“people”).add(data)应为
    let request=tx.objectStore(“人”).add(值)。注意“值”的变化A是的,谢谢你指出。更新代码。
    
    // for single value
    function add(data) {
        let request = db.transaction(["people"], "readwrite").objectStore("people").add(data);
    }
    
    // for multiple value
    function addMultiple(datas, callback) {
        const tx = db.transaction(["people"], "readwrite");
    
        datas.forEach(data => {
            let request = tx.objectStore("people").add(data);
        })
    
        tx.oncomplete = function(event) {
            callback();
        }
    };
    
    // so now data will be only array    
    function add(datas, callback) {
        const tx = db.transaction(["people"], "readwrite");
    
        datas.forEach(data => {
            let request = tx.objectStore("people").add(data);
        })
    
        tx.oncomplete = function(event) {
            callback();
        }
    };
    
    // so when want to insert single value , we will call like this.
    
    const value = {
        id: 1,
        name: 'ujjwal'
    }
    add([value], () => {
    
    })