如何为每个用户电子邮件设置单独的 IndexedDb 存储
How to set individual IndexedDb storage per user email
我正在制作一个 React 应用程序,用户可以在其中在自己的个人资料中创建一些数据,然后再查看。我使用 localForage 将这些数据保存在 IndexedDB 中。问题出在IndexedDB的设计上,IndexedDB store是按照domain来保存数据的。我有多个用户登录并创建数据。我正在使用 firebase,我可以使用 onAuthStateChange 方法获取用户电子邮件。我需要为 IndexedDB 中的每个帐户创建一个商店。我尝试这样做,但我坚持以正确的方式使用 运行ning 异步和同步代码。这是我创建 IndexedDb 实例的代码 -
import localforage from 'localforage';
let totalCardsData = localforage.createInstance({
name: 'totalCardsData',
storeName: 'cards',
});
export { totalCardsData };
使用它我只能创建 1 个名为 'totalCardsData' 的商店。在这里,我尝试为对象创建一个动态名称。
import firebase from 'firebase/app';
import localforage from 'localforage';
import initFirebase from '../utils/auth/initFirebase';
initFirebase();
let userEmail = '';
let totalCardsData;
firebase.auth().onAuthStateChanged(user => {
if (user) {
userEmail = user.email;
}
});
totalCardsData = localforage.createInstance({
// name: 'totalCardsData',
name: `${userEmail}`,
storeName: 'cards',
});
export { totalCardsData };
onAuthStateChanged 是一个异步方法。所以我得到了 ${userEmail}
的空字符串,因为 onAuthStateChanged 在其余代码执行完毕后完成了它的执行。
我想在 onAuthStateChanged 完成执行后 运行 totalCardsData。这样我就可以获得 userEmail 字符串。
我建议
- 在两个不同的模块中分离 firebase onAuthStateChange(例如:
module1
)和本地存储创建逻辑(例如:module2
),在父文件中导入它们。
- 编写一个方法,将 userEmail 作为参数并在
module2
中重新调整 localstorage 实例并导出该方法(例如:createLocalStorageInstance
)。
- 生成自定义事件并从 onAuthStateChange 发出它并在父文件中收听它并从那里调用
createLocalStorageInstance
。
这应该有效。
我正在制作一个 React 应用程序,用户可以在其中在自己的个人资料中创建一些数据,然后再查看。我使用 localForage 将这些数据保存在 IndexedDB 中。问题出在IndexedDB的设计上,IndexedDB store是按照domain来保存数据的。我有多个用户登录并创建数据。我正在使用 firebase,我可以使用 onAuthStateChange 方法获取用户电子邮件。我需要为 IndexedDB 中的每个帐户创建一个商店。我尝试这样做,但我坚持以正确的方式使用 运行ning 异步和同步代码。这是我创建 IndexedDb 实例的代码 -
import localforage from 'localforage';
let totalCardsData = localforage.createInstance({
name: 'totalCardsData',
storeName: 'cards',
});
export { totalCardsData };
使用它我只能创建 1 个名为 'totalCardsData' 的商店。在这里,我尝试为对象创建一个动态名称。
import firebase from 'firebase/app';
import localforage from 'localforage';
import initFirebase from '../utils/auth/initFirebase';
initFirebase();
let userEmail = '';
let totalCardsData;
firebase.auth().onAuthStateChanged(user => {
if (user) {
userEmail = user.email;
}
});
totalCardsData = localforage.createInstance({
// name: 'totalCardsData',
name: `${userEmail}`,
storeName: 'cards',
});
export { totalCardsData };
onAuthStateChanged 是一个异步方法。所以我得到了 ${userEmail}
的空字符串,因为 onAuthStateChanged 在其余代码执行完毕后完成了它的执行。
我想在 onAuthStateChanged 完成执行后 运行 totalCardsData。这样我就可以获得 userEmail 字符串。
我建议
- 在两个不同的模块中分离 firebase onAuthStateChange(例如:
module1
)和本地存储创建逻辑(例如:module2
),在父文件中导入它们。 - 编写一个方法,将 userEmail 作为参数并在
module2
中重新调整 localstorage 实例并导出该方法(例如:createLocalStorageInstance
)。 - 生成自定义事件并从 onAuthStateChange 发出它并在父文件中收听它并从那里调用
createLocalStorageInstance
。
这应该有效。