Javascript 如何设置每个用户电子邮件的单个IndexedDb存储
我正在制作一个react应用程序,用户可以在自己的配置文件中创建一些数据,然后查看。我正在使用LocalFound将此数据保存在IndexedDB中。问题在于IndexedDB的设计,IndexedDB存储根据域保存数据。我有多个用户登录并创建数据。我正在使用firebase,我可以使用onAuthStateChange方法获取用户电子邮件。我需要为IndexedDB中的每个帐户创建一个存储。我尝试过这样做,但我坚持以正确的方式运行异步和同步代码。下面是我创建IndexedDb实例的代码-Javascript 如何设置每个用户电子邮件的单个IndexedDb存储,javascript,database,firebase,asynchronous,indexeddb,Javascript,Database,Firebase,Asynchronous,Indexeddb,我正在制作一个react应用程序,用户可以在自己的配置文件中创建一些数据,然后查看。我正在使用LocalFound将此数据保存在IndexedDB中。问题在于IndexedDB的设计,IndexedDB存储根据域保存数据。我有多个用户登录并创建数据。我正在使用firebase,我可以使用onAuthStateChange方法获取用户电子邮件。我需要为IndexedDB中的每个帐户创建一个存储。我尝试过这样做,但我坚持以正确的方式运行异步和同步代码。下面是我创建IndexedDb实例的代码- im
import localforage from 'localforage';
let totalCardsData = localforage.createInstance({
name: 'totalCardsData',
storeName: 'cards',
});
export { totalCardsData };
使用它,我只能创建一个名为“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。这样我就可以获得用户电子邮件字符串。我建议
module1
)和localstorage创建逻辑(例如:module2
)分别放在两个不同的模块中,并在父文件中导入module2
中重新运行localstorage实例并导出该方法(例如:createLocalStorageInstance
)createLocalStorageInstance
这应该有效。同一台机器上有多个用户?是的。我在同一台计算机上有多个用户。您需要等待身份验证状态更改后才能创建实例。你现在不是在等,是的。这就是问题所在。我不知道如何暂停代码执行,直到身份验证状态改变。这是我问题的最后一部分-我想在onAuthStateChanged完成执行后运行totalCardsData。这样我就可以得到userEmail字符串。您正在尝试静态导出一个动态值。你不能这样做。您只需从auth事件回调处理程序调用LocalFower.createInstance。我将我的createLocalInstance包装到一个函数中,并将电子邮件作为该函数的参数。然后导出该函数,返回值为createLocalStorage。所以我并没有完全按照你说的去做,但你的回答给了我一个想法。所以我认为你的答案是正确的。