我正在开发一个应用程序,它广泛使用IndexedDB。我想要做的是保存员工的数据表和公司表的数据。
每个员工都属于一个公司,而员工对象我有Company's ID
,这两个实体的对象都是这样的。在回调中抛出IDBTransaction抛出TransactionInactiveError
公司的目标:
{"id":1,"name":"ABC"}
员工对象:
{"id":100,"name":"E1","company_id":1}
我节省使用自动递增的关键公司的详细信息(称之为appid
),所以我的最终目标公司的外观如下:
{"id":1,"name":"ABC","appid":1}
当我插入公司的记录时,appid会自动递增。
现在同时将员工的目标,我想找到该公司的本地ID(appid
)并将其保存在员工的目标,使员工的物体看起来像:
{"id":100,"name":"E1","company_id":1,"company_app_id":1}
我能够得到的本地ID公司通过调用一个方法,同时节省了员工的详细信息,如:
var transaction = db.transaction(['employees'], 'readwrite');
var objStore = transaction.objectStore('employees');
var company_id=employeeobject.company_id;
companyDB.getCompanyById(company_id,function(companyObject){
transaction = db.transaction(['employees'], 'readwrite');
objStore = transaction.objectStore('employees');
// If I comment above two lines it throws me exception.
var request=objStore.put(employeeobject);
request.onsuccess = function (e) {
// using it for next insertion.
};
});
问题与上面的代码是每次当我想插入员工在表中的数据,我需要重新在回调函数中trascation,因为如果我不不开放交易再次抛出TransactionInactiveError。
我在SO上搜索了特定的错误,发现事务一旦在当前范围内不再使用就立即失效。
当我有几个员工的对象时,上面的代码工作得很好。 但是当我试图用〜1K的数据执行相同的代码时,它需要 (正常执行时间x〜10)。
正常执行时间我的意思是没有获取公司的localid并直接保存员工的详细信息。
所以我的问题是,什么是我可以插入员工的数据,包括公司的本地ID与至少执行时间的最佳方式?或者我做错了什么?
这将解决单一企业与单一的雇员。正如我在我的问题中提到的那样,我写的代码对于单个条目可以很好地工作。我有更多的1K的公司和10K的员工。所以在这种情况下,我无法弄清楚这将如何工作! –