NgRx|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:
【NgRx|NgRx 里 first 和 take(1) 操作符的区别】(1)您将发出的零项视为错误条件(例如,在发出之前完成)并且如果出现错误的可能性大于 0%,则您可以优雅地处理它
(2)或者你 100% 知道源 observable 会发出至少1个项目
更多Jerry的原创文章,尽在:"汪子熙":
文章图片
推荐阅读
- 你到家了吗
- 闲杂“细雨”
- 村里的故事|村里的故事 --赵大头
- 情节33.0
- 生命过客——第10章|生命过客——第10章 初为人母
- 你眼里的不公平,其实很公平
- 画廊百里若江南
- 抱着梦的无眠
- 在古城迷惑如何觅食吗(看这里!)
- 时光,是行走在文字里的眷恋