rxjs asapscheduler 的执行顺序

2024-04-12

考虑到我有以下代码:

let Rx = window['rxjs'];
const { of,
    queueScheduler,
    asapScheduler,
    asyncScheduler,
    animationFrameScheduler
} = Rx;
const { observeOn, tap } = Rx.operators;
console.clear();


let source$ = of(1, 2, 3, asapScheduler).pipe(
    tap((v) => {
        console.log('tap ', v);
    }),
)

source$.subscribe((v) => {
    console.log('Value ', v);
    Promise.resolve().then(() => {
        console.log('Microtask value ', v);
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.2.1/rxjs.umd.js"></script>

我使用 asapScheduler 运算符。

根据文档,

asap 将等待当前同步执行的代码结束,然后尝试尽快执行给定的任务。

上述代码的执行顺序是怎样的?它们是如何工作的?我没想到最后会打印出tap3

以下是输出,

tap  1
Value  1  
tap  2    // here why did this not print Microtask value 1 and Microtask value 2 after printing tap1 and value1?
Value  2
Microtask value  1
Microtask value  2
tap  3
Value  3
Microtask value  3

据我所知,RxJS 倾向于独立调度程序的使用。它按预期工作:

let source$ = of(1, 2, 3).pipe(
    tap((v) => {
        console.log('tap ', v);
    }),
)

source$.subscribe((v) => {
    asapScheduler.schedule(() => console.log('Value ', v));
    asyncScheduler.schedule(() => Promise.resolve().then(() => {
        console.log('Microtask value ', v);
    }))
})

另一种含义,如果你使用scheduler在你的可观察的内部,就像Of(..., asapScheduler), - 它需要您的可观察对象的完整路径流,从创建到订阅结束,并尝试尽快调用它。在您的微任务示例中,它看起来很合理。

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

rxjs asapscheduler 的执行顺序 的相关文章

  • 如果另一个可观察量在 RxJS 中有数据,如何忽略一个可观察量中的所有数据?

    我有两个可观察量 一个从浏览器接收数据本地存储另一个来自database通过WebAPI 我想订阅它们 所以如果从本地存储有数据 不启动从database 如果从观察到本地存储没有任何 数据 调用ajax调用以获取数据WebAPI 在下面的
  • 立即开始首次调用 IntervalObservable

    我正在使用一个IntervalObservable连续调用我的应用程序的服务器端 我可以订阅和取消订阅 Oberservable 一切正常 但有一个例外 对服务器的第一次调用会延迟 但我希望它是即时的 该人的行为IntervalObserv
  • 是否有一个运算符可以作为 concatMap 但具有多个内部可观察值

    我正在使用可观察的对象来查询我的数据库 该可观察对象将返回一个数组 其中包含找到的所有匹配对象 我的问题是我想将可观察值映射到我将从另一个 API 检索的更多详细信息 我尝试了 concatMap 但它只让我在初始可观察值中嵌套 1 个可观
  • Angular2 查询参数订阅触发两次

    尝试处理 OAuth 登录场景 其中如果用户登陆页面authorization code在查询字符串中 我们处理令牌并继续or如果他们在没有该令牌的情况下登陆页面 我们会检查本地存储中是否存在现有令牌 确保其仍然有效 并根据其有效性重定向到
  • 为什么rxjs不取消我的承诺?

    我在用rxjs in my angular应用程序 当多个数据时 我并不总是按照我想要的顺序取回数据REST已拨打电话 控制器 constructor rx Observable fromPromise this getExpenses t
  • RXJS 等待所有 Observable 完成并返回结果

    我正在尝试创建一个 RX 流 该流将异步执行 XHR 调用列表 然后等待它们完成 然后再进行下一个调用 为了帮助解释这一点 可以在普通 JS 中这样写 try await requests map r gt angularHttpServi
  • Angular:仅刷新令牌一次

    我使用带有刷新令牌策略的 JWT 作为身份验证 并且我的 Angular 客户端中有一个拦截器 它将令牌作为标头发送 我在发送之前检查是否过期 并在需要时使用我的refreshToken刷新令牌 问题是当发送 2 个 或更多 请求时 两个请
  • RxJS v5 中的速率限制和计数限制事件,但也允许传递

    我有很多事件要发送到服务 但请求有速率限制 每个请求都有计数限制 每秒 1 个请求 bufferTime 1000 每个请求 100 个活动项目 bufferCount 100 问题是 我不确定如何以有意义的方式将它们组合起来 允许通过 让
  • 如何在角度中对取消订阅功能进行单元测试

    我想找到一种方法来测试订阅和主题上的取消订阅函数调用 我想出了一些可能的解决方案 但每一种都有优点和缺点 请记住 我不想出于测试目的而更改变量的访问修饰符 通过反射访问组件的私有变量 在这种情况下 我有一个存储订阅的私有类变量 组件 ts
  • http 请求每 x 秒一次(角度)

    我试图在 angular2 中每 x 秒刷新一次 http 调用 ionViewDidLoad let loader this LoadingController create content Please Wait loader pres
  • Angular 5 订阅和取消订阅 Observable

    我必须从两个订阅获取数据 但我总是得到第一个订阅的数据 我有一个数据共享服务 import Injectable from angular core import BehaviorSubject from rxjs BehaviorSubj
  • 从打字稿和 Angular 中的 Observable 获取字符串值

    我想从 Observable 获取字符串值并将该值从函数返回给调用者函数 例如 我有一组键 想一一获取所有键的值 字符串 并将其显示在具有菜单栏的 html 组件中 这是 ts 文件 key list component ts public
  • 如何延迟forkJoin

    你会怎样拖延 forkJoin 在 rxjs 中 这是我已经拥有但想使用的delay https www learnrxjs io operators utility delay html运营商用那个 return forkJoin thi
  • 对嵌套的 observable 进行排序

    我这里有一个 JSON 文件 如下所示 question What is your age range options 10 20 20 30 30 40 40 50 question How did you find us options
  • RXJS while 循环进行分页

    我尝试查询所有人员的数据swap api http swapi co URL swapi co api people 返回一个带有 people 数组的对象 以及我从中获取下一个数据的 URL swapi co api people pag
  • subject.next 不在 ngOnInit 中触发

    有谁知道为什么这段代码 从主题初始化一个值 不起作用 是否存在错误或设计使然 我究竟做错了什么 ts import Component OnInit from angular core import Subject from rxjs Co
  • 将 React 值从子级传递给父级

    我正在努力解决一些可能非常简单的事情 我的父组件是一个搜索小部件 它需要使用在单独的抽屉组件中定义的过滤器 目前 用户可以输入搜索查询 该查询会调用 API 并且需要根据抽屉组件中的选择器来过滤结果 但是 我无法将父母和孩子联系起来以实现这
  • RxJS 将三元组中的属性组合到表中

    我有一项服务生成类似于三元组的对象 它们将采用以下格式 country attribute value Example country usa attribute population value 100 country mexico at
  • 在 Angular 2 中进行并行调用 http get 或 post 调用

    如何在 Angular 2 中进行并行调用 HTTP get 或 post 调用 我有 2 个服务电话 其中一个愈伤组织的响应必须拨打另一个电话 有人可以建议我如何通过错误处理场景进行这些并行调用吗 如果您的服务是Observable基于而
  • Angular 7通过调用两次服务订阅方法进行通信

    我正在使用角度 尝试与非父子组件进行通信 所以我通过服务来传达它 服务 ts Istoggle false Output change EventEmitter lt boolean gt new EventEmitter toggle t

随机推荐

  • 禁用 Oracle 中所有作业的脚本(DBMS_JOB 包)?

    我正在寻找一个禁用所有作业的脚本 现在 我在 Toad 中将它们全部突出显示 单击脱机按钮 然后提交更改 在 PL SQL 中必须有一种方法来做到这一点 如果要阻止所有作业运行 可以更改初始化参数JOB QUEUE PROCESSES 如果
  • 避免在处理 config.properties 的 Java 类文件中使用静态方法和变量

    我正在开发一个简单的 Java 应用程序 并且创建了一个名为 Config java 的类来处理应用程序属性 从而避免硬编码 Config java 类不是静态类 我正在另一个名为 Serial java 的类中创建 Config java
  • 死信交换 RabbitMQ 丢弃消息

    我正在尝试在 RabbitMQ 中实现 dlx 队列 场景很简单 我有 2 个队列 1 活着 2 死亡 x dead letter exchange 立即 x message ttl 5000 以及 立即 交换 这必然是 1 活着 我尝试运
  • 当终端大小调整时,Ncurses 程序退出

    当我调整终端窗口大小时 以下程序退出 为什么以及如何阻止它 include
  • 如何在java程序中获取kafka消耗滞后

    我写了一个java程序来消费来自kafka的消息 我想监控消费延迟 如何通过java获取它 顺便说一句 我用
  • Java如何检测文件变化

    有没有办法以某种方式触发一个事件 每次文件更改时都会执行某些操作 我的意思是类似的东西 用伪代码 if DetectedFileModified pathToFile do stuff 我知道我可以定期执行此操作 但我可以在没有计时器的情况
  • PHP Imagick如何最适合文本注释

    我正在将注释文本添加到 newPseudoImage 中 该图像工作正常 但我想让文本缩放以适应图像大小 我有什么想法可以做到这一点吗 im new Imagick draw new ImagickDraw draw gt setFillC
  • 请告诉我如何打开4d数据库?

    我尝试打开 使用 4d v12 扩展名为 4dc 的数据库 此外还有扩展名为 4dd 和 4dr 的文件 结果是错误 您无法转换已编译的数据库 也许这是数据库的旧版本 但我找不到任何可以将其转换为新版本的内容 我的目标是从数据库中获取信息
  • Android 应用无法获取位置权限

    我的清单中有以下内容
  • 哪种 Java 集合认为排列是相等的?

    我想创建可能包含重复值的集合 没有特定的顺序 换句话说 1 1 2 2 1 1 1 2 1 事实上 我想要一组这些集合 所以如果我尝试添加这两个集合 1 1 2 and 2 1 1 第二 add 实际上不会做任何事情 是否有一个标准集合已经
  • 按最高值对字典进行排序? [复制]

    这个问题在这里已经有答案了 我有一个带有字符串键和整数值的字典 有什么方法可以获取这个字典并使用它来获取从最高值到最低值的键列表 Example gt gt gt myDict seven 7 four 4 one 1 two 2 five
  • 无法绑定到“routerLink”,因为它不是“a”的已知属性[重复]

    这个问题在这里已经有答案了 我正在将我们的一个应用程序从 rc4 更新到 angular2 0 0 但在运行时出现模板解析错误 这是我的视图模板 div class col xs 3 quick link a div class tile
  • 为什么打印 int[] 时会得到垃圾输出?

    我的程序应该计算文件中每个字符的出现次数 忽略大小写 我写的方法是 public int getCharTimes File textFile throws FileNotFoundException Scanner inFile new
  • HBase Java 客户端 - 未知主机:localhost.localdomain

    版本 Hadoop 2 0 0 cdh4 3 1 HBase 0 94 6 cdh4 3 1 我正在运行cloudera快速启动vm 一切都在172 16 144 150上运行 这是我的小HBase Java客户端 HbaseClient
  • C 链接错误:未定义对“main”的引用

    我试图将多个 C 程序链接在一起 但收到错误响应 gcc o runexp o scd o data proc o lm fopenmp usr lib gcc x86 64 linux gnu 4 6 x86 64 linux gnu c
  • MySQL 错误代码:1005

    我正在尝试将外键添加到我的表中 但收到此错误 错误代码 1005 无法创建表 william sql 88c 3 errno 150 我有3张桌子 员工 客户和合同 员工 employee no PK 客户 customer id PK 合
  • opencv误差乘以2 Mat的

    我在 opencv 中将 2 个矩阵 Mat 对象 相乘 以下是第一个 Mat 的生成方式 cv Mat R m k CV 8UC1 rm generateRandomMatrix m k 255 R 第二个是如何生成的 for int i
  • 在 __init__ word=self.search_box.text AttributeError: 'NoneType' 对象没有属性 'text'

    我正在制作一个应用程序 据我所知 我做得正确 但仍然收到此错误 字 self search box text AttributeError NoneType 对象没有属性 text 我已经检查了拼写错误和其他常见错误 但它仍然不起作用 这是
  • 将单列转换为多列

    我有这个功能 function renderListSelecoes data JAX RS serializes an empty list as null and a collection of one as an object not
  • rxjs asapscheduler 的执行顺序

    考虑到我有以下代码 let Rx window rxjs const of queueScheduler asapScheduler asyncScheduler animationFrameScheduler Rx const obser