【问题标题】:How to set individual IndexedDb storage per user email如何为每个用户电子邮件设置单独的 IndexedDb 存储
【发布时间】:2021-06-30 15:34:47
【问题描述】:

我正在制作一个反应应用程序,用户可以在其中创建自己的个人资料中的一些数据,然后再查看它。我使用 localForage 将这些数据保存在 IndexedDB 中。问题是由于 IndexedDB 的设计,IndexedDB 存储根据域保存数据。我有多个用户登录并创建数据。我正在使用 firebase,我可以使用 onAuthStateChange 方法获取用户电子邮件。我需要为 IndexedDB 中的每个帐户创建一个商店。我试过这样做,但我坚持以正确的方式运行异步和同步代码。这是我创建 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 字符串。

【问题讨论】:

  • 同一台机器上有多个用户?
  • 是的。我在同一台机器上有多个用户。
  • 您需要等待创建实例,直到身份验证状态发生变化。您现在没有在等待。
  • 是的。这就是问题所在。我不知道如何在身份验证状态更改之前暂停代码执行。这是我问题的最后一部分 - 我想在 onAuthStateChanged 完成执行后运行 totalCardsData 。这样我就可以获得 userEmail 字符串。
  • 您正在尝试静态导出动态值。你不能做这个。您只需从身份验证事件回调处理程序调用 localForage.createInstance。

标签: javascript database firebase asynchronous indexeddb


【解决方案1】:

我建议

  1. 将 firebase onAuthStateChange(例如:module1)和 localstorage 创建逻辑(例如:module2)分开在两个不同的模块中,并在父文件中导入。
  2. 编写一个以 userEmail 作为参数的方法,并在 module2 中重新调整本地存储实例并导出该方法(例如:createLocalStorageInstance)。
  3. 生成一个自定义事件并从 onAuthStateChange 发出它并在父文件中监听它并从那里调用createLocalStorageInstance

这应该可行。

【讨论】:

  • 我将 createLocalInstance 包装到一个函数中,并将电子邮件作为该函数的参数。然后导出该函数,返回值为 createLocalStorage。所以我没有完全按照你说的去做,但你的回答让我有了想法。所以我将你的答案标记为正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2015-08-09
  • 2013-06-11
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多