Update indexedDb within Ajax returns error: The transaction has finished?

Update indexedDb within Ajax returns error: The transaction has finished?

我正在尝试使用来自 IndexedDb 的数据更新 mysql。

我循环将 IndexedDb 和插入数据扔到 mysql。
当 ajax 调用完成时,循环应该继续。

但是我得到这个错误:

Uncaught DOMException: Failed to execute 'update' on 'IDBCursor': The transaction has finished.

我可以看到 Ajax 调用返回成功并且 mySql 已更新。
但是在更新 IndexDb 时出现 returns 错误。

这是代码:

//UPDATE/SYNC INDEXEDDB WITH MYSQL
function update_mysql(){
    
    //UPDATE INFO TEXT
    $('#info_text').text('Öppnar IndexedDb..');
 
    //OPEN CONNECTION TO INDEXEDDB
    var transaction = db.transaction(["Orderlist"], "readwrite");
    var objectStore = transaction.objectStore('Orderlist');

    //FETCH DATA FROM INDEXEDDB
    objectStore.openCursor().onsuccess = function(event) { 
        var cursor = event.target.result; 
        if (cursor) {
            
            //UPDATE INFO TEXT
            $('#info_text').text('Loopar igenom IndexedDb..');
            
            //IF STATUS = 1, SYNC/UPDATE
            if (cursor.value.status == "1") { 
                
                var order_id = cursor.value.id;
                var sum_received = cursor.value.sum_received;
                
                //UPDATE INFO TEXT
                $('#info_text').text('Ansluter till databasen..');

                //SEND DATA TO PHP
                $.ajax({
                    url: 'php/update_mysql_orderlist.php',
                    method: 'post',
                    dataType: 'json',
                    data: {order_id: order_id, sum_received: sum_received},
                    success: function(result){
                        //UPDATE INFO TEXT
                        $('#info_text').text('Order med id: '+order_id+' updaterad i mySql');
                    },
                    complete: function(){
                        //UPDATE INDEXDB STATUS
                        var updateData = cursor.value;
                        updateData.status = "2";
                        var request = cursor.update(updateData);
                        
                        //REQUST SUCCESS
                        request.onsuccess = function() {
                            console.log('Order with id: '+order_id+' is now updated with IndexedDb!');
                        };
                        
                        //CONTINUE LOOP
                        cursor.continue();
                    }
                });
            }
            //IF STATUS != 1
            else{
                //CONTINUE LOOP
                cursor.continue();
            }
        }
        else {
            //LOOP IS DONE!
            console.log('Update/sync completed!');
        }
    };
};

更好的解决方案?
我应该先从 IndexedDb 获取数据并保存到数组,然后只用 Ajax 进行一次交易吗?然后更新 IndexedDb?!这是更好的方法吗?

在开始交易之前执行 ajax 调用。您不能将带有 ajax 的异步调用与 indexedDB 事务混合在一起。 IndexedDB 事务将在检测到事务中没有活动请求后很快自动关闭。