首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从ngrx效果多次分派相同的动作

从ngrx效果多次分派相同的动作是指在使用ngrx状态管理库时,通过效果(Effect)来触发动作(Action),并且可能会多次分派相同的动作。下面是一个完善且全面的答案:

在ngrx中,效果是用来处理副作用(side effect)的,比如异步请求、本地存储、日志记录等。当一个动作被分派时,效果可以监听该动作并执行相应的副作用操作。有时候,由于某些原因,我们可能需要多次分派相同的动作,比如在某个条件满足时重试一个异步请求。

要实现从ngrx效果多次分派相同的动作,可以按照以下步骤进行:

  1. 创建一个效果(Effect)来监听需要多次分派的动作。可以使用@Effect()装饰器来定义效果,并使用ofType操作符来过滤需要监听的动作类型。
  2. 在效果中,使用switchMap操作符来处理多次分派相同动作的逻辑。switchMap操作符可以将一个动作映射为一个新的可观察对象,并且可以在其中执行任意的异步操作。
  3. 在switchMap操作符中,可以使用递归调用来实现多次分派相同动作的逻辑。通过判断某个条件是否满足,如果满足则分派相同的动作,并继续递归调用switchMap操作符。

以下是一个示例代码:

代码语言:txt
复制
import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { switchMap } from 'rxjs/operators';
import { of } from 'rxjs';

@Injectable()
export class MyEffects {
  myEffect$ = createEffect(() =>
    this.actions$.pipe(
      ofType('MY_ACTION_TYPE'), // 替换为实际的动作类型
      switchMap((action) => this.handleAction(action))
    )
  );

  constructor(private actions$: Actions) {}

  handleAction(action: any) {
    // 处理动作的逻辑,可以是异步操作等
    // ...

    // 判断某个条件是否满足,如果满足则分派相同的动作
    if (condition) {
      return of({ type: 'MY_ACTION_TYPE' }); // 替换为实际的动作类型
    }

    return of({ type: 'NOOP_ACTION' }); // 替换为实际的空动作类型
  }
}

在上面的示例中,MY_ACTION_TYPE是需要多次分派的动作类型,handleAction方法是处理动作的逻辑,condition是判断条件是否满足的条件。如果条件满足,则通过of操作符创建一个新的可观察对象,分派相同的动作;否则,可以选择分派一个空动作或者不分派任何动作。

关于ngrx的更多信息和使用方法,可以参考腾讯云的相关产品和文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何 100 亿 URL 中找出相同 URL?

请找出 a、b 两个文件共同 URL。 解答思路 每个 URL 占 64B,那么 50 亿个 URL占用空间大小约为 320GB。...使用同样方法遍历文件 b,把文件 b 中 URL 分别存储到文件 b0, b1, b2, ..., b999 中。...这样处理过后,所有可能相同 URL 都在对应小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应小文件不可能有相同 URL。...那么接下来,我们只需要求出这 1000 对小文件中相同 URL 就好了。 接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。...我要回去写代码,这才是我所热爱! 用谷歌搜索技术问题一定比用百度好?也未必... 好多大咖曾看他书学习Java,如今这个男人新作来了! Lombok!代码简洁神器还是代码“亚健康”元凶?

2.8K30

面试:如何 100 亿 URL 中找出相同 URL?

请找出 a、b 两个文件共同 URL。 解答思路 每个 URL 占 64B,那么 50 亿个 URL占用空间大小约为 320GB。...使用同样方法遍历文件 b,把文件 b 中 URL 分别存储到文件 b0, b1, b2, ..., b999 中。...这样处理过后,所有可能相同 URL 都在对应小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应小文件不可能有相同 URL。...那么接下来,我们只需要求出这 1000 对小文件中相同 URL 就好了。 接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。...然后遍历 bi 中每个 URL,看在 HashSet 集合中是否存在,若存在,说明这就是共同 URL,可以把这个 URL 保存到一个单独文件中。

4.4K10

面试:如何 100 亿 URL 中找出相同 URL?

请找出 a、b 两个文件共同 URL。 解答思路 每个 URL 占 64B,那么 50 亿个 URL占用空间大小约为 320GB。...使用同样方法遍历文件 b,把文件 b 中 URL 分别存储到文件 b0, b1, b2, ..., b999 中。...这样处理过后,所有可能相同 URL 都在对应小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应小文件不可能有相同 URL。...那么接下来,我们只需要求出这 1000 对小文件中相同 URL 就好了。 接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。...然后遍历 bi 中每个 URL,看在 HashSet 集合中是否存在,若存在,说明这就是共同 URL,可以把这个 URL 保存到一个单独文件中。

2.3K20

一个Angular 5教程:一步一步指导实现你第一个Angular 5应用程序

所以我们效果在做出取决于外部系统东西(我们Firebase,准确地说)后派发新动作。...但是在相同代码中,我们看到了另一个效果,它ServerFailure使用装饰器参数处理动作dispatch: false。这是什么意思?...我们日志中可以看出,我们正在明确调度Action,但没有服务器请求在这里为我们提供。怎么了?我们忘了将我们效果加载到我们AppModule中。...这就是你如何效果集成到服务器加载数据过程。但是我们仍然需要将其发回到我们的卡片创建中。让我们来做这件事吧。...如果我们仔细观察控制台,我们会看到两个LoadSuccess动作先按照它应该与我们新卡一起分派,然后第二个动作与我们两张卡一起分派。如果不起作用,我们行动中哪里会派遣?

42.5K10

面试经历:如何 100 亿 URL 中找出相同 URL?

请找出 a、b 两个文件共同 URL。 解答思路 每个 URL 占 64B,那么 50 亿个 URL占用空间大小约为 320GB。...使用同样方法遍历文件 b,把文件 b 中 URL 分别存储到文件 b0, b1, b2, ..., b999 中。...这样处理过后,所有可能相同 URL 都在对应小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应小文件不可能有相同 URL。...那么接下来,我们只需要求出这 1000 对小文件中相同 URL 就好了。 接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。...然后遍历 bi 中每个 URL,看在 HashSet 集合中是否存在,若存在,说明这就是共同 URL,可以把这个 URL 保存到一个单独文件中。

1.9K00

SimpleTuning

),这样就避免了一个符号引用多次解析。...由于 类相同需要与类加载绑定,所以使用双亲委派加载类可以保证rt.jar,bin/lib下面的类都是由系统自身加载器加载,而不是用户自定义加载,导致多个相同得类存在。...栈帧存储了方法局部变量表、操作数栈、动态连接和方法返回地址等信息。 每一个方法调用开始至执行完成过程,都对应着一个栈帧在虚拟机里面入栈到出栈过程。...4、虚拟机动态分派实现 由于动态分派是非常频繁动作,而且动态分派方法版本选择过程需要运行时在类方法元数据中搜索合适目标方法,因此在虚拟机实际实现中基于性能考虑,大部分实现都不会真正进行如此频繁搜索...由于指令数量和内存访问原因,所以导致了栈架构指令集执行速度会相对较慢。 基于栈解释器执行过程 初步理论知识已经讲解过了,本节准备了一段Java代码,看看在虚拟机中实际是如何执行

44920

Java中方法调用分析!详细解析静态分派和动态分派执行过程

静态类型变化 编译器在重载时是通过参数静态类型而不是实际类型作为判断依据,静态类型在编译期间可以知道: 编译阶段,Javac编译器会根据参数静态类型决定使用哪个重载版本 静态分派: 所有依赖静态类型来定位方法执行版本分派动作...典型应用 :方法重载 静态分派发生在编译阶段,因此确定静态分派动作不是由虚拟机执行,而是由编译器完成 由于字面量没有显示静态类型,只能通过语言上规则去理解和推断 public class LiteralTest...静态类型Human两个变量man和woman在调用sayHello() 方法时执行了不同行为 变量man在两次调用中执行了不同方法 导致这个现象额原因 :这两个变量实际类型不同 Java虚拟机是如何根据实际类型分派方法执行版本...: invokevirtual指令多态查找过程开始 ,invokevirtual指令运行时解析过程大致分为以下几个步骤: 找到操作数栈顶第一个元素所指向对象实际类型,记作C 如果在类型C中找到与常量中描述符和简单名称相符合方法...,可以理解虚拟机在分派中 "会做什么" 这个问题 虚拟机 "具体是如何做到" 在各种虚拟机实现上会有差别: 由于动态分派是非常频繁动作,而且动态分派方法版本选择过程需要运行时在类方法元数据中搜索合适目标方法

66710

同样做前端,为何差距越来越大?

庆幸是除了 React 社区,Vue 社区有类似的 Vuex,Angular 社区有 NgRx 也提供了几乎同样能力,甚至 NgRx 还可以无缝使用 redux-devtools 来调试状态变化。...无论如何优化,始终要遵循 Redux 三原则: ? 这三个问题我们是通过自研 iron-redux 库【1】来解决,以下是背后思考: 如何组织 Action?...如何组织 Store/Reducer?...Pont 解析 API 元信息生成 TS 取数函数,这些取数函数类型完美,并挂载到 API 模块下。最终代码中取数效果是这样: ?...五、严格彻底 Code Review 过去一年,我们一共进行了 1200+ 多次 Code Review(CR),很多同事刚开始不好意思提 MR(GitLab Merge Request,Code

1.2K20

方法调用:一看就懂,一问就懵?

此处之所以执行是Human类型方法,是因为编译器在重载时,会通过参数「静态类型」来作为判定执行方法依据,而不是使用「实际类型」。 所有依赖静态类型来定位方法执行版本分派动作称为静态分派。...静态分派典型应用就是方法重载。静态分派发生在编译阶段,因此确定静态分派动作实际上不是由虚拟机来执行,而是由编译器来完成。 动态分派 了解了重载之后再来了解下重写?...❞ 根据这个结论我们反向推理一下:man和women是静态类型相同变量,它们在调用相同方法sayHello()时返回了不同结果,并且在变量man两次调用中执行了不同方法。...导致这个现象原因很明显,是这两个变量「实际类型」不同,Java虚拟机是如何根据实际类型来分派方法执行版本呢?...但是Son和Father都没有重写来自Object方法,所以它们方法表中所有Object继承来方法都指向了Object数据类型。

37230

重载和重写底层原理——虚拟机字节码执行引擎

这两类分派方式两两组合就构成了静态单分派、静态多分派、动态单分派、动态多分派4种分派组合情况,下面我们来看看虚拟机中方法分派如何进行。...那看来解决问题关键还必须invokevirtual指令本身入手,要弄清 楚它是如何确定调用方法版本、如何实现多态查找来着手分析才行。...但是相同代码在JavaScript中情况则不一样,无论obj具体是何种类型,无论其继承关系如何,只要这种类型方法定义中确实包含有println(String)方法,能够找到相同签名方法,调用便可成功...关于Java虚拟机是如何调用方法、进行版本选择内容已经全部讲解完毕,本节开始,我们来探讨虚拟机是如何执行方法里面的字节码指令。...笔者在本章多次强调了“概念模型”,是因为实际虚拟机实现,譬如HotSpot模板解释器工作时候,并不是按照下文中动作一板一眼地进行机械式计算,而是动态产生每条字节码对应汇编代码来运行,这与概念模型中执行过程差异很大

30020

给2019前端开发你5个进阶建议~

庆幸是除了 React 社区,Vue 社区有类似的 Vuex,Angular 社区有 NgRx 也提供了几乎同样能力,甚至 NgRx 还可以无缝使用 redux-devtools 来调试状态变化。...无论如何优化,始终要遵循 Redux 三原则: 原则 方法 引发问题 Single source of truth 组件 Stateless,数据来源于 Store 如何组织 Store?...代码和工具全面拥抱 TS 后,实现了后端 API 接口到 View 组件全链路静态分析,具有了完善代码提示和校验能力。 ?...Pont 解析 API 元信息生成 TS 取数函数,这些取数函数类型完美,并挂载到 API 模块下。最终代码中取数效果是这样: ?...五、严格彻底 Code Review 过去一年,我们一共进行了 1200+ 多次 Code Review(CR),很多同事刚开始不好意思提 MR 到后来追着别人 Review,CR 成为每个人习惯

99410

深入理解JVM虚拟机5:虚拟机字节码执行引擎

栈帧存储了方法局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法调用开始至执行完成过程,都对应着一个栈帧在虚拟机栈里面入栈到出栈过程。 栈帧概念结构如下图所示: ?...虚拟机通过索引定位方式使用局部变量表,索引值范围0开始至局部变量表最大Slot数量。...3.2 分派 分派调用过程将会揭示多态性特征一些最基本体现,如“重载”和“重写”在Java虚拟中是如何实现。 1 静态分派 所有依赖静态类型来定位方法执行版本分派动作,都称为静态分派。...4 虚拟机动态分派实现 由于动态分派是非常频繁动作,而动态分派在方法版本选择过程中又需要在方法元数据中搜索合适目标方法,虚拟机实现出于性能考虑,通常不直接进行如此频繁搜索,而是采用优化方法。...其原理与C++虚函数表类似。 虚方法表中存放是各个方法实际入口地址。如果某个方法在子类中没有被重写,那子类虚方法表里面的地址入口和父类中该方法相同,都指向父类实现入口。

53910

《深入理解Java虚拟机》笔记

执行上面这段过程是:ClassLoader,这个东西还是非常重要,在JVM中是通过ClassLoader和类本身共同去判断两个Class是否相同。...其实“静态”和“动态”给人感觉还是比较模糊,“静态分派”给人感觉是根据参数类型向上查找方法,“动态分派”给人感觉则是根据实例真实类型向上查找。...虚拟机优化动态分派效率一般是为类在方法区中建立一个虚方法表: 虚方法表中存放各个方法实际入口地址,如果某个方法在子类中没有被重写,那么子类虚方法表里面的地址入口和父类相同方法地址入口是一致,都指向父类实现入口...在监测器发现有热点代码(被调用了很多次方法或者是执行很多次循环体)情况下,将会想即时编译器提交一个该该方法代码编译请求。...Threadstart方法先行于线程任何一个动作; 线程所有动作都先行于线程终止检测; 对线程interrupt方法调用先行于被中断线程代码检测到中断事件发生; 对象初始化完成先行于finalize

34310

Java虚拟机--方法调用

而且根据分派宗量数还可以分为单分派和多分派分派: 1、静态分派 所有依赖静态类型来定位方法执行版本分派动作称为静态分派。静态分派典型应用是方法重载。...静态分派发生在编译阶段,因此静态分派动作实际上不是由虚拟机来执行。 ?...代码中刻意定义了两个静态类型相同实际类型不同变量,但虚拟机(准确说是编译器)在重载时是通过参数静态类型而不是实际类型作为判定依据。并且静态类型是编译期已知,而实际类型在运行期才能确定。 ?...动态分派是看接收者实际类型而非静态类型,和静态分派相反。 ? 3、单分派和多分派 方法接收者与方法参数统称为方法宗量。根据分派基于多少种宗量,可以划分为单分派和多分派两种。 ?...因为只有一个宗量进行选择,所以Java语言动态分派属于单分派类型。

51050

JVM第七卷---虚拟机字节码执行引擎

栈帧中存储了方法局部变量表,操作数栈,动态链接和方法返回地址等信息。 每一个方法调用开始到执行结束,都对应着一个栈帧虚拟机栈中入栈到出栈过程。...所有依赖静态类型来决定方法执行版本分派动作,成为静态分派。 静态分派发生在编译阶段,因此确定静态分派动作实际不是由虚拟机执行,这也是为什么有些资料把它归入解析而不是分派。...下面在字节码层面剖析一下: 这两条字节码指令无论指令还是参数来看,都完全一样。 虽然指令相同,但是最终执行方法却不同,这是怎么肥事呢?...总结:java语言是一门静态多分派,动态单分语言 ---- 虚拟机动态分派实现原理 首先按常理来处理动态分派的话,过程如下: 运行时在接受者类型方法元数据中搜索合适目标方法 但是动态分派是非常频繁动作...虚方法表存放着各个方法实际入口地址,如果某个方法在子类中没有被重写,那么子类虚方法表中地址入口和父类相同方法地址入口是一致,都指向父类实现入口。

29510

深入理解JVM - 栈帧和分派

概述 了解栈桢内部结构,以及每一个部分组件工作和负责内容 了解分派关键命令:invokeVirtual命令执行过程 了解什么是方法分派,为什么Java使用是静态多分派和动态单分派 了解重载和重写是如何在...下面是关于局部变量表变量槽一些特点: 使用索引定位方式,32位使用单独n指向 ,对于64位,使用n和n+1相邻地位方式处理 方法调用使用变量槽0存储this引用位传递方法,也可以说变量槽是1开始而不是...从这一段代码中可以看到,由于多态特性,方法实现不可能再是在编译器可以知道,因为这里如果按照静态编译的话一个子类会出现两个相同方法,这时候就是动态分派起作用时候,至于为什么jvm可以知道运行时候到底执行哪一个方法...,可以看到由于这里定义了QQ和360两个对象,这两个对象又在父类和子类里面作为参数进行分派动作,之前我们说过,由于静态分派是在编译时期就已经完成了,所以在进行方法和类型判断时候会判断是调用子类还是父类...写在最后 通过本节讲述,我们对于分派以及栈桢理解更上了一个层次,下一篇将会讲述关于jvm如何实现动态语言,也是十分重要内容。

50120

深入理解Java虚拟机(字节码执行引擎)

栈帧存储了方法局部变量、操作数栈、动态链接和方法返回地址等信息。每一个方法调用开始到执行完成过程,都对应着一个栈帧在虚拟机栈里入栈到出栈过程。...这两类分派方式两两组合就构成了静态单分派、静态多分派、动态单分派、动态多分派 4 种分派组合情况,下面我们再看看虚拟机中方法分派如何进行分派 面向对象有三个基本特征,封装、继承和多态。...这里要说分派将会揭示多态特征一些最基本体现,如「重载」和「重写」在 Java 虚拟机中是如何实现?虚拟机是如何确定正确目标方法? 静态分派 在开始介绍静态分派前我们先看一段代码。...代码中定义了两个静态类型相同但是实际类型不同变量,但是虚拟机(准确说是编译器)在重载时是通过参数静态类型而不是实际类型作为判定依据。...所有依赖静态类型来定位方法执行版本分派动作称为静态分派。静态分派典型应用是方法重载。静态分派发生在编译阶段,因此确定静态分派动作实际上不是由虚拟机来执行

61630

深入理解Java虚拟机-虚拟机执行子系统

解析 解析阶段是虚拟机将常量池内符号引用替换为直接引用过程。前面提到过很多次符号引用和直接引用,那么到底什么是符号引用和直接引用呢?...类加载器 虚拟机设计团队把类加载阶段中「通过一个类全限定名来获取描述此类二进制字节流」这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要类。...这两类分派方式两两组合就构成了静态单分派、静态多分派、动态单分派、动态多分派 4 种分派组合情况,下面我们再看看虚拟机中方法分派如何进行分派 面向对象有三个基本特征,封装、继承和多态。...这里要说分派将会揭示多态特征一些最基本体现,如「重载」和「重写」在 Java 虚拟机中是如何实现?虚拟机是如何确定正确目标方法? 静态分派 在开始介绍静态分派前我们先看一段代码。...所有依赖静态类型来定位方法执行版本分派动作称为静态分派。静态分派典型应用是方法重载。静态分派发生在编译阶段,因此确定静态分派动作实际上不是由虚拟机来执行

31620

彻底搞懂访问者模式静态、动态和伪动态分派

访问者模式最大优点就是增加访问者非常容易,代码中可以看到,如果要增加一个访问者,则只要新实现一个访问者接口类,从而达到数据对象与数据操作相分离效果。...2 静态分派到动态分派 变量被声明时类型叫作变量静态类型(Static Type),有些人又把静态类型叫作明显类型(Apparent Type);而变量所引用对象真实类型又叫作变量实际类型(...所谓动态双分派就是在运行时依据两个实际类型去判断一个方法运行行为,而访问者模式实现手段是进行两次动态单分派来达到这个效果。...,从而决定了accept()方法动作。...以上过程通过两次动态双分派,第一次对accept()方法进行动态分派,第二次对访问者visit()方法进行动态分派,从而达到根据两个实际类型确定一个方法行为效果

44620
领券