cursor.onsuccess = function(event) { let result = event.target.result; if (result) { let data = result.value; let sceneData = JSON.parse(data.name); editor.fromJSON(sceneData); console.log('数据库',JSON.parse(data.name)); // 输出存储的数据 result.continue(); loadingElement.remove(); } };上文函数不成功执行能捕捉到执行另一个函数
时间: 2024-03-20 20:38:39 浏览: 61
可以在 `cursor.onerror` 事件中捕捉到执行另一个函数,例如:
```
cursor.onerror = function(event) {
console.error("数据库读取失败", event.target.error);
// 执行另一个函数
};
```
在该函数中,可以执行任何你需要的操作,例如输出错误信息、重新加载数据等。
相关问题
let transaction = db.transaction(['myStore'], 'readonly'); let objectStore = transaction.objectStore('myStore'); let index = objectStore.index('name'); let cursor = index.openCursor(); cursor.onsuccess = function(event) { let result = event.target.result; if (result) { let data = result.value; let sceneData = JSON.parse(data.name); editor.fromJSON(sceneData); console.log('数据库',JSON.parse(data.name)); // 输出存储的数据 result.continue(); loadingElement.remove(); } }; cursor.onerror = function(event) { console.error("数据库读取失败", event.target.error); loadingElement.remove(); // 执行另一个函数 }; transaction.oncomplete = function(event) { db.close(); };上文中判断读取的数据库为空时在控制台打印数据库为空
如果数据库中没有任何数据,则在 `cursor.onsuccess` 事件中 `result` 为 `null`。此时,你可以在该事件中添加一个判断语句,例如:
```
cursor.onsuccess = function(event) {
let result = event.target.result;
if (result) {
let data = result.value;
let sceneData = JSON.parse(data.name);
editor.fromJSON(sceneData);
console.log('数据库', JSON.parse(data.name)); // 输出存储的数据
result.continue();
loadingElement.remove();
} else {
console.log('数据库为空');
loadingElement.remove();
}
};
```
如果数据库为空,则会输出 `数据库为空`。注意,`result` 为 `null` 不代表读取数据库失败,只是表示没有数据可以读取了。如果读取数据库失败,应该在 `cursor.onerror` 事件中输出错误信息。
three.js editor 加载时读取浏览器数据库中数据
要在three.js编辑器加载时从浏览器中读取数据并使用它来设置场景,可以使用以下代码:
```
let request = indexedDB.open('myDatabase', 1);
request.onerror = function(event) {
console.log('打开数据库出错!');
};
request.onsuccess = function(event) {
let db = event.target.result;
let transaction = db.transaction(['myStore'], 'readonly');
let objectStore = transaction.objectStore('myStore');
let cursor = objectStore.openCursor();
cursor.onsuccess = function(event) {
let result = event.target.result;
if (result) {
let data = result.value;
let sceneData = JSON.parse(data.name);
editor.fromJSON(sceneData);
result.continue();
} else {
// 如果没有存储的数据,则使用默认场景
editor.signals.sceneGraphChanged.dispatch();
}
};
transaction.oncomplete = function(event) {
db.close();
};
};
```
这段代码使用IndexedDB API打开名为“myDatabase”的数据库,并创建一个只读事务。然后,它打开“myStore”存储的游标,并在游标移动时解析数据的“name”属性并使用它来设置编辑器的场景。最后,它关闭数据库连接。如果打开数据库时出现错误,将在控制台输出错误消息。如果没有存储的数据,则使用默认场景并调用场景图变更信号。
阅读全文