如何使用indexedDB的承诺在@ngrx/core中设置initialState

2023-12-10

我想使用 idb 包在 ngrx 中设置初始状态,该包使用 Promise 来获取数据,但每次尝试设置时都会出现错误。我读到 @ngrx 是同步的,这是否意味着它不能与 Promise 一起使用。 我尝试过的不同方法:

这是我的 idb 包装方法,它加载数据,工作正常

export function getInitialState(): Promise<any> {
  return StorageService.dB.loadInitialState('app-state');
}

我尝试的不同方法设置了初始状态

方法:1

StoreModule.forRoot(reducers, {initialState: getInitialState})

方法:2

 import { INITIAL_STATE } from '@ngrx/store';
{ provide: INITIAL_STATE, useFactory: getInitialState }

方法:3

export function logger(reducer: ActionReducer<State>): ActionReducer<State> {
  return function (state: State, action: any): State {
   if(action.type === '@ngrx/store/init') {

   }
    return reducer(state, action);
  };

}

初始化状态设置为这样

ZoneAwarePromise {__zone_symbol__state: null, __zone_symbol__value: Array(0)}

我收到这个错误

ERROR TypeError: Cannot assign to read only property '__zone_symbol__state' of object '[object Object]'
    at resolvePromise (zone.js:810)
    at eval (zone.js:876)
    at ZoneDelegate.invokeTask (zone.js:425)
    at Object.onInvokeTask (core.js:4747)
    at ZoneDelegate.invokeTask (zone.js:424)
    at Zone.runTask (zone.js:192)
    at drainMicroTaskQueue (zone.js:602)
    at ZoneTask.invokeTask [as invoke] (zone.js:503)
    at invokeTask (zone.js:1540)
    at IDBRequest.globalZoneAwareCallback (zone.js:1566)

*******更新*******

我现在明白了,因为 dee zg 指出每个状态的效果中都可以有一个 init 函数,该函数会在加载时被触发,我一开始以为这是一个全局一次性事件。这是我用于身份验证状态的一个

 @Effect()
  init$: Observable<Action> = defer(() => {
    return from(StorageService.readItem('app', Auth.AUTH_KEY)).pipe(
       map((data: any) => {
        return new Auth.AuthInit(data.state);
      })
    );
  });

有一个init当效果运行时触发的效果中的动作。在那里您可以调度您的操作、获取数据并填充初始状态。 查看Init Action此处部分:https://github.com/ngrx/platform/blob/master/MIGRATION.md

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用indexedDB的承诺在@ngrx/core中设置initialState 的相关文章

随机推荐

  • 在带有卡片的 RecyclerView 上添加搜索过滤器?

    我找到了过滤器的解决方案ListView and SearchView on RecyclerView分开 但我想把它们结合起来 有可能吗 是的 有可能你的RecyclerView Adapter可以实施Filterable 之后你必须覆盖
  • primefaces.org/ui 无法解析

    我是 JSF 和 PrimeFaces 的新手 也是 stackoverflow 的新手 并且遇到配置 部署问题 我正在使用 PrimeFaces 5 0 Tomcat 7 0 55 和 JSF 2 2 JSF 标签可以解析并工作 但 Pr
  • 类内或类外的函数声明

    我是一名正在尝试学习 C 的 JAVA 开发人员 但我真的不知道标准函数声明的最佳实践是什么 在课堂里 class Clazz public void Fun1 do something 或者在外面 class Clazz public v
  • 使用index.html时页面未从DOM卸载

    我有两个非常简单的页面 如下所示 如果我浏览到 mysite com 网络服务器将返回 index html 内容 这是正常的 如果我单击 page2 链接 jquery mobile 会将第二页加载到 DOM 中 但是doesn t从 D
  • Spring Boot + Yaml + @PropertySource + @ConfigurationProperties + 属性源文件中的列表未注入

    我正在尝试注射external yml属性到 POJO 使用 ConfigurationProperties并导入我的external yml文件使用 PropertySource 所有其他的都被注入到 POJO 中 但不是一个复杂的列表
  • 使用 PowerShell 从 SharePoint 打开 Excel 文档

    我正在尝试使用 PowerShell 从 SharePoint 打开 Excel 工作簿 我没有加载 SharePoint 管理单元 我没有它 当 PowerShell 尝试启动工作簿时 SharePoint 会提示输入凭据 问题是我们正在
  • 公式值的 Google 脚本返回 #N/A

    当我在脚本中读取时 F 列有一个公式值 显示 N A 下面是一个非常简单的脚本代码 但我无法理解为什么它显示 N A 我没有实现任何触发器 var spreadsheet SpreadsheetApp getActiveSpreadshee
  • .filter 中的 ES6 .filter

    所以我有如下数据 id 0 title happy dayys owner id 1 username dillonraphael tags value Art label Art items id 1 title happy dayys
  • 如何从 MS Word 中的行号获取文本

    是否可以使用办公自动化从 MS Word 中的给定行号获取文本 行或句子 我的意思是 如果我可以获得给定行号中的文本或作为该行一部分的句子本身 那就可以了 我没有提供任何代码 因为我完全不知道如何使用办公自动化阅读 MS Word 我可以像
  • 将字符串数组转换为整数数组

    所以基本上用户从扫描仪输入输入序列 12 3 4 etc 它可以是任意长度 并且必须是整数 我想将字符串输入转换为整数数组 so int 0 将会12 int 1 将会3 etc 有什么建议和想法吗 我正在考虑实施if charat i 获
  • GetWindowRect 在 Windows 10 中具有偏移量

    我在程序中使用 GetWindowRect 来获取桌面上窗口的坐标 这在我用于测试的十几台电脑 XP W8 1 上运行良好 但在我的一台带触摸屏的 W10 电脑上则不然 坐标向左上角有偏移 我在 google 上搜索了 Windows 10
  • 如果数据保持不变,有没有办法让同一个 SQL 查询得到不同的结果?

    当我运行这个查询时 我间歇性地得到一个不同的结果集 有时它给出 1363 个结果 有时给出 1365 个结果 有时给出 1366 个结果 数据没有改变 可能是什么原因造成的 有什么方法可以预防吗 查询看起来像这样 SELECT FROM S
  • 使用 Java 运行 Linux/Unix 文件系统?

    我需要创建一个 Java util 它将通过 Unix 和 或 Linux 文件系统递归并构建目录结构的对象模型 检索文件信息 大小 创建日期 上次访问日期等 另外我需要检索文件所在的物理存储设备上的信息 理想情况下 该实用程序是可移植的
  • Google Chart API:更改悬停图例的颜色

    所以我有一个柱形图其中一项内置功能是 您可以将鼠标悬停在图表图例中的某个项目 所谓的类别 上 然后您会在图表中相应的列周围看到一些突出显示边框 现在 我的图表中有许多列和类别 并且很难看到突出显示的系列 类别 因为默认行为仅在列周围显示 1
  • 使用“rvalueCast”的默认 Visual Studio 项目设置

    我有了一个令人震惊讽刺 gt 的发现 默认情况下 Visual Studio 2015 不兼容 C 11 我可以按照步骤操作我在这里列出对于每个项目 或使用 Notepad 或类似工具进行文件替换 但我确实注意到 命令行 属性有一个复选框
  • 在 SQL Server 中,我可以将多个节点从表插入到 XML 中吗?

    我想根据表中的数据在存储过程中生成一些 XML 以下插入允许我添加许多节点 但它们必须是硬编码或使用变量 sql variable SET MyXml modify insert
  • 使用 JSch 作为 SFTP 客户端时如何启用被动模式?

    我正在使用 JSch 作为 SFTP 客户端 现在我需要启用被动模式由于安全方面的一些限制 但我找不到启用的方法被动模式 有人可以告诉我该怎么做吗 被动模式 是FTP协议的一个特点 在正常 FTP 模式下 对于每个单独的文件 客户端都会侦听
  • 按下空格键时,删除的复选框会重新出现在树视图节点中

    我已经使用了公认的解决方案从这个问题去除checkbox from a 树形视图节点 in my WM INITDIALOG处理程序 加载后 tree有一个适当的外观 选择节点并单击所在位置后checkbox会是 什么也没有发生 check
  • keras多层LSTM模型的股价预测收敛于恒定值

    I ve made a multilayer LSTM model that uses regression to predict next frame s values of the data The model finishes aft
  • 如何使用indexedDB的承诺在@ngrx/core中设置initialState

    我想使用 idb 包在 ngrx 中设置初始状态 该包使用 Promise 来获取数据 但每次尝试设置时都会出现错误 我读到 ngrx 是同步的 这是否意味着它不能与 Promise 一起使用 我尝试过的不同方法 这是我的 idb 包装方法