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

2021年09月15日 阅读数:4
这篇文章主要向大家介绍NgRx 里 first 和 take(1) 操做符的区别,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

take(1) vs first()typescript

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

下列代码会报错:函数

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

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

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

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

下列代码输出1:spa

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) 只取第一个值并完成。不涉及进一步的逻辑。code

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

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

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

使用 first 操做符需谨慎,当知足下列条件使,可使用 first:ip

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

更多Jerry的原创文章,尽在:"汪子熙":
get