在javascript中,我这里有一个类来处理请求。我想确保所有的错误处理都设置好了。我想打开与数据库的连接并在每次请求时关闭它。到目前为止我有这个代码
export default class IndexedDBStorage {
#name:string;
constructor(name:string) {
this.#name = name;
}
private async GetDB():Promise<IDBDatabase> {
return new Promise((resolve, reject) => {
// https://javascript.info/indexeddb
const request = window.indexedDB.open(this.#name, 1);
request.onupgradeneeded = () => {
//this.#db = request.result;
if (!request.result.objectStoreNames.contains(this.#name)) {
request.result.createObjectStore(this.#name, {keyPath: 'id', autoIncrement:true});
}
};
request.onerror = () => {
reject("Why didn't you allow my web app to use IndexedDB?! " + request.error?.code);
};
request.onsuccess = () => {
//request.result.onerror = () => {
// Generic error handler for all errors targeted at this database's requests!
// reject("Database error: " + request.error?.code);
//};
resolve(request.result);
};
});
}
async GetAllItems<T>():Promise<Array<T>> {
return new Promise((resolve, reject) => {
this.GetDB().then(db => {
const transaction = db.transaction(this.#name);
const store = transaction.objectStore(this.#name);
const datarequest = store.getAll();
db.close();
datarequest.onsuccess = function() {
resolve(datarequest.result);
};
datarequest.onerror = function() {
reject("Error " + datarequest.error);
};
}).catch(err => {
console.error(err);
});
});
}
}
还想知道,
GetDB
函数里面这部分有什么区别。这是数据库本身的 onerror 事件,它是在 onsuccess 事件中设置的。
//request.result.onerror = () => {
// Generic error handler for all errors targeted at this database's requests!
// reject("Database error: " + request.error?.code);
//};
还有这部分
datarequest.onerror = function() {
reject("Error " + datarequest.error);
};
?
谢谢
的
error