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 个我的项目
更多 Jerry 的原创文章,尽在:” 汪子熙 ”: