我需要下载一个文件列表,并将它们存储在IndexedDB本地。我使用fetch
检索文件,如下所示:
cacheRecordings() {
var request = window.indexedDB.open("database", 2);
request.onsuccess = event => {
var database = event.target.result;
var transaction = database.transaction(["store"], 'readwrite'); //second step is opening the object store
this.objectStore = transaction.objectStore("store");
}
for (const url of this.urls) {
fetch(url)
.then(resp => resp.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const index = this.objectStore.index('path');
index.openCursor().onsuccess = function(event) { <-- Error is thrown here
this.objectStore.add(url, path);
}.bind(this)
})
.catch((error) => {
console.log(error)
})
}
}
上面的代码导致以下两个错误:
在'IDBIndex'上执行'openCursor'失败:事务未激活
在'IDBObjectStore'上执行'index'失败:事务已完成
如何使用IndexedDB存储获取的文件?
我发现了一个相关的问题-但它没有解决我的用例获取文件。TransactionInactiveError: Failed to execute 'add'on 'IDBObjectStore':事务未激活
我猜发生这种情况是因为您正在同步循环(for)中执行异步操作(fetch)
要确认这一点,请尝试在数据库中存储单个文件而不进行循环。如果成功,请考虑在循环
中执行async代码。