IndexedDB error: IDBObjectStore Symbol could not be cloned
IndexedDB error: IDBObjectStore Symbol could not be cloned
我有一个 class,其中某些属性不应存储到 indexedDB 存储中。当我克隆对象并随后删除属性时它会起作用,但是我不太喜欢这个解决方案。我想知道是否有一个解决方案,我们只是将 属性 以某种方式设置为私有,因此在写入 indexedDB 存储时不应包含 属性。
我尝试了以下方法:
我在我的 class 中使用了一个符号作为 属性 并通过 get/set 我修改了 属性,但是当我尝试将对象存储到 indexedDB 存储时,我得到以下信息错误:IndexedDB 错误:无法克隆 IDBObjectStore 符号
这是一个示例代码:
var request = indexedDB.open('test', 2);
request.onerror = function(event) {
// Handle errors.
};
request.onupgradeneeded = function(event) {
var db = event.target.result;
// Create an objectStore to hold information about our customers. We're
// going to use "ssn" as our key path because it's guaranteed to be
// unique.
var objectStore = db.createObjectStore("customers", {
keyPath: 'id'
});
var mystring = "Hello World"
var myblob = new Blob([mystring], {
type: 'text/plain'
});
var file = new File([myblob], 'test');
var a = Symbol('a');
var obj = {
id: 'foo',
b: a
};
obj[a] = file;
objectStore.add(obj);
};
可以存储在 IndexedDB 中的对象必须是可序列化的。规范定义为:
https://html.spec.whatwg.org/multipage/structured-data.html#serializable-objects
符号值在算法步骤中被显式调用为不可序列化。
您可以通过使 属性 不可枚举来将其排除在序列化之外,例如:
Object.defineProperty(obj, 'b', {value: a, enumerable: false});
我有一个 class,其中某些属性不应存储到 indexedDB 存储中。当我克隆对象并随后删除属性时它会起作用,但是我不太喜欢这个解决方案。我想知道是否有一个解决方案,我们只是将 属性 以某种方式设置为私有,因此在写入 indexedDB 存储时不应包含 属性。
我尝试了以下方法: 我在我的 class 中使用了一个符号作为 属性 并通过 get/set 我修改了 属性,但是当我尝试将对象存储到 indexedDB 存储时,我得到以下信息错误:IndexedDB 错误:无法克隆 IDBObjectStore 符号
这是一个示例代码:
var request = indexedDB.open('test', 2);
request.onerror = function(event) {
// Handle errors.
};
request.onupgradeneeded = function(event) {
var db = event.target.result;
// Create an objectStore to hold information about our customers. We're
// going to use "ssn" as our key path because it's guaranteed to be
// unique.
var objectStore = db.createObjectStore("customers", {
keyPath: 'id'
});
var mystring = "Hello World"
var myblob = new Blob([mystring], {
type: 'text/plain'
});
var file = new File([myblob], 'test');
var a = Symbol('a');
var obj = {
id: 'foo',
b: a
};
obj[a] = file;
objectStore.add(obj);
};
可以存储在 IndexedDB 中的对象必须是可序列化的。规范定义为:
https://html.spec.whatwg.org/multipage/structured-data.html#serializable-objects
符号值在算法步骤中被显式调用为不可序列化。
您可以通过使 属性 不可枚举来将其排除在序列化之外,例如:
Object.defineProperty(obj, 'b', {value: a, enumerable: false});