fix: 解决indexedDB的setItem、,removeItem以及clear在请求成功时而不是事务完成时触发resolve问题
parent
2d36d6b510
commit
df5cb426d1
|
|
@ -34,10 +34,13 @@ class IndexedDBDriver implements IStorageDriver {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const tx = db.transaction(this.storeName, 'readwrite');
|
const tx = db.transaction(this.storeName, 'readwrite');
|
||||||
const store = tx.objectStore(this.storeName);
|
const store = tx.objectStore(this.storeName);
|
||||||
const request = store.clear();
|
store.clear();
|
||||||
|
|
||||||
request.addEventListener('success', () => resolve());
|
tx.addEventListener('complete', () => resolve());
|
||||||
request.addEventListener('error', () => reject(request.error));
|
tx.addEventListener('error', () => reject(tx.error));
|
||||||
|
tx.addEventListener('abort', () =>
|
||||||
|
reject(tx.error ?? new Error('Transaction aborted')),
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,10 +77,13 @@ class IndexedDBDriver implements IStorageDriver {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const tx = db.transaction(this.storeName, 'readwrite');
|
const tx = db.transaction(this.storeName, 'readwrite');
|
||||||
const store = tx.objectStore(this.storeName);
|
const store = tx.objectStore(this.storeName);
|
||||||
const request = store.delete(key);
|
store.delete(key);
|
||||||
|
|
||||||
request.addEventListener('success', () => resolve());
|
tx.addEventListener('complete', () => resolve());
|
||||||
request.addEventListener('error', () => reject(request.error));
|
tx.addEventListener('error', () => reject(tx.error));
|
||||||
|
tx.addEventListener('abort', () =>
|
||||||
|
reject(tx.error ?? new Error('Transaction aborted')),
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -86,10 +92,13 @@ class IndexedDBDriver implements IStorageDriver {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const tx = db.transaction(this.storeName, 'readwrite');
|
const tx = db.transaction(this.storeName, 'readwrite');
|
||||||
const store = tx.objectStore(this.storeName);
|
const store = tx.objectStore(this.storeName);
|
||||||
const request = store.put(value, key);
|
store.put(value, key);
|
||||||
|
|
||||||
request.addEventListener('success', () => resolve());
|
tx.addEventListener('complete', () => resolve());
|
||||||
request.addEventListener('error', () => reject(request.error));
|
tx.addEventListener('error', () => reject(tx.error));
|
||||||
|
tx.addEventListener('abort', () =>
|
||||||
|
reject(tx.error ?? new Error('Transaction aborted')),
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue