NgRx 里 first 和 take(1) 操作符的区别

take(1) vs first()

first() 运算符采用可选的 predicate 函数,并在源完成后没有匹配的值时发出错误通知。

下列代码会报错:

import { EMPTY, range } from 'rxjs';
import { first, take } from 'rxjs/operators';

EMPTY.pipe(first()).subscribe(console.log, err =>
  console.log('Jerry Error:', err)
);

同理,下面代码也会报错:

range(1, 5).pipe(
  first(val => val > 6),
).subscribe(console.log, err => console.log('Error', err));

下列代码输出1:

import { EMPTY, range } from 'rxjs';
import { first, take } from 'rxjs/operators';

range(1, 5)
  .pipe(first())
  .subscribe(console.log, err => console.log('Error', err));

另一方面, take(1) 只取第一个值并完成。不涉及进一步的逻辑。

import { EMPTY, range } from 'rxjs';
import { first, take } from 'rxjs/operators';

EMPTY.pipe(
  take(1),
).subscribe(console.log, err => console.log('Error', err));

上面代码不会有任何输出:

使用 first 操作符需谨慎,当满足下列条件使,可以使用 first:

(1)您将发出的零项视为错误条件(例如,在发出之前完成)并且如果出现错误的可能性大于 0%,则您可以优雅地处理它 (2)或者你 100% 知道源 observable 会发出至少1个项目

(0)

相关推荐

  • promise的常用情况

    因为js是单线程的,所以一旦代码中有报错,就不会执行下面的了,如下333就未打印 console.log(111) throw Error(222) console.log(333) 好像与promi ...

  • AWS Lambda快速上手 - 接受SNS,并且插入DynamoDB

    Lambda 在aws 扮演这很重要的位置: 1:下面开始用Lambda 导入SNS的消息,并且发送到DynamoDB 的过程: 先创建一个Lambda: (注意要选择一个可以执行DynamoDB 的 ...

  • RxJS快速入门

    内容导航 目录 内容导航 RxJS是什么 RxJS的主要成员 Observable (可观察对象) 创建 Observable 订阅 Observables 执行 Observables 清理 Obs ...

  • ES6语法之异步编程-Promise

    Promise 分解异步操作,避免回调地狱 //1.promise //分解异步操作,避免回调地狱 function testMise(value) { //resolve成功后回调 //reject ...

  • 影像科里DR、CT、核磁共振的区别

    放射科是现代医院重要的辅助检查科室,集中了检查.诊断和治疗活动.现代临床各科治疗多种疾病时,都需要使用到放射科的设备实施全面检查,达到辅助诊断的目的.现阶段医院放射科中的设备主要是包含DR(直接数字化 ...

  • 在阴凉处适合养的几种植物,养花盆里和养树荫下有啥区别?

    有很多朋友会有疑问,在阴凉的地方栽种植物需要有什么讲究呢?如果家里阳光不够,要挑选哪些耐阴植物呢?下面就分享一下栽种耐阴植物常见的问题. 1.养半阴处和阴凉处的植物 上图为树荫下的玉簪花 这里所说的半 ...

  • 液压系统里的溢流阀和减压阀有什么区别?

    在液压系统中溢流阀跟减压阀有什么区别?我发现我们车间里好多机械装配的师傅老是有点傻傻分不清的感觉.那么今天我们来好好的讲讲它们的相同之处跟不相同的地方.如果你想持续的学习液压知识可以关注我们哦(今日头 ...

  • 中药里补血药与补阴药有什么区别?

    补虚药主要用于虚症.所谓虚症,一般说来,有气虚.阳虚.血虚.阴虚等不同类型.补虚药根据它的效髓及应用范围,一般也分为补气药.助阳药.养血药.滋阴药等. 在临床上用药,主要根据虚症的不同类型而予以不同的 ...

  • 书法题款里, “嘱书”和“雅正”有什么区别?

    答:二者的意思不同,无论字面意思还是实际功能. "嘱书"是谓嘱咐.嘱托.要求写的这幅作品,并且有指定的内容. 比方说,张三是位书法家,李四嘱托他写一幅"厚德载物" ...

  • 基金里的a和c有什么区别

    基金里的a和c区别在于: 1.回收不同:A类份额有申购费.赎回费,持有时间越长时,赎回费用越小:C类份额没有申购费,但是有销售服务费.赎回费,费用随持有时间增长而减小. 2.扣款不同:C类基金是为了喜 ...

  • 粤语里面的“生果”与“水果”有乜嘢区别?好多广东人都唔知道

    今期内容:水果.生果.拍床拍席.云吞 ▼如视频无法播放 请退出刷新几次▼

  • 西班牙语里的entorno和en torno的区别

    El sustantivo entorno no debe confundirse con la locución en torno, escrita en dos palabras. 西班牙语名词e ...

  • 西班牙语里的de más和demás的区别

    El adjetivo demás no significa lo mismo que la construcción adverbial de más, por lo que es recomend ...