take(1)vsfirst()first()运算符接受一个可选的谓词函数,并在源完成后没有找到匹配值时发出错误通知。以下代码会报错:import{EMPTY,range}from'rxjs';import{first,take}from'rxjs/operators';EMPTY.pipe(first()).subscribe(console.log,err=>console.log('JerryError:',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('错误',呃));上面的代码不会有任何输出:小心使用first运算符,当满足以下条件时可以使用first:(1)你将发出的零项视为错误条件(例如,在发出Done之前)并且如果机会error大于0%,你可以优雅地处理它(2)或者你知道100%源observable发出至少1项Jerry的更多原创文章:“WangZixi”:
