RXJS不是那么常见的操作员
#javascript #网络开发人员 #spanish #rxjs

看了RXJ中的常见运营商之后,这次是某些不常见的操作员的转变,也许是某些开发人员未知的,但是在将行为添加到我们的行为中时非常有用。

第一的

first操作员是一个过滤操作员,仅发出入口序列中发出的第一个值然后完成序列。
还可以指定可选条件以确定发行的第一个值。

kude0运算符的一般形式如下:

first(predicate?: function): Observable

predicate参数是一个函数,用于确定序列中发出的第一个值。如果未提供predicate函数,Kuude0运算符将发布以序列发出的第一个函数,其行为与我们使用Kude Operator一样。

有一个示例:

import { interval } from 'rxjs'
import { first } from 'rxjs/operators';

const source = from([1, 2, 3, 4, 5]);

const example - source.pipe(
 first(x => x > 2)
);

example.subscribe(console.log) // salida: 3

在此示例中,我们创建了一个发射值1、2、3、4、5的kude6,然后我们将Kouude0运算符应用带有Kouude2函数的Kouude0运算符,该函数将Kouude9返回第一个值,该值大于2。它以满足条件的顺序发行的第一个值为3,因此这就是subscribe的退出。

必须记住,Kude11将在发出第一个值后完成顺序,因此将排除第一个值后发出的任何附加值。如果没有符合条件的值,则将产生的kude6不会发出任何值。

同时

takeWhile操作员是一个过滤操作员,它采用Koude发出的值,直到产生不满足指定条件的值为止。

kude13操作员的一般形式如下:

takeWhile(predicate?: function, inclusive?: boolean): Observable

predicate参数是用于评估Observable发出的每个值的函数。如果发行的值满足指定条件,则将包含在结果中。如果该值不满足条件,则将完成订阅并将发行。

可选的inclusive参数用于包括或排除指定条件不满足的值。如果Kude18是kude9,则条件不符合的值将包括在出口中。如果kouude18是kouude22条件不符合的值,则将排除在出口中。

例如:

import { of } from 'rxjs'
import { takeWhile } from 'rxjs/operators';

const source = of(1, 2, 3, 4, 5);

const example - source.pipe(
 takeWhile(x => x < 4)
);

example.subscribe(console.log) // salida: 1, 2, 3

在此示例中,我们创建了一个排放值1、2、3、4、5的kude6,然后我们将Kude13运算符应用带有Kouude2函数的Kude13运算符,该函数评估了,如果发出的每个值小于4将包括证券1、2和3,但在发出4年-OREAR -old的价值之后,值的排放将停止。

也可以使用可选的inclusive参数包括或排除指定条件不满足的值。例如:

import { of } from 'rxjs'
import { takeWhile } from 'rxjs/operators';

const source = of(1, 2, 3, 4, 5);

const example - source.pipe(
 takeWhile(x => x < 4, true)
);

example.subscribe(console.log) // salida: 1, 2, 3, 4

在这种情况下,即使条件将由Observable发行,并且值的发行将在该条件不符合的值5之后停止。

情况

takeUntil操作员是一个结束操作员,它播放kude6的值,直到从另一个kude6广播事件。

kude13操作员的一般形式如下:

takeUntil(notifier: Observable): Observable

notifier参数是一个kouude6,用于广播一个事件,表明原点的发射必须结束。当kude33发出值或完整时,origin Observable完成并且不再发出值。

这将是您的大理石水龙头:

Image description

有一个示例:

import { interval, timer } from 'rxjs';
import { takeUntil } from 'rxjs/operators';

const source = interval(1000);
const stopTimer = timer(5000);

const example = source.pipe(
 takeUntil(stopTimer)
);

example.subscribe(console.log) // salida: 0, 1, 2, 3, 4

在此示例中,我们创建一个使用Kude39每秒发射值的Kude6,然后我们创建了一个使用timer(5000)后5秒后完成的Observable。最后,我们将kude29运算符与kude33 stopTimer一起使用,该操作员将在5秒后完成原点的传输。

结果是,仅发射原点的前5个值,因为在kude33 kude44发出的值和完整值之后,发射被停止。

我们还可以使用其他kude6(例如notifier)来结束原点Observable的发射,例如按压植物,API响应,中断的网络连接,等等。

跳过

skip操作员用于省略kude6的第一个元素并广播其余元素。

kude52操作员的一般形式如下:

skip(count: number): Observable

kude55参数是一个整数,指示在开始广播元素之前必须省略元素的数量。

这是Kude52操作员的大理石图:

Image description

在这里一个例子:

import { of } from 'rxjs';
import { skip } from 'rxjs/operators';

const source = of(1, 2, 3, 4, 5);
const example = source.pipe(skip(3));

example.subscribe(console.log); // salida: 4, 5

在此示例中,我们创建了一个kude6,该kude6使用kude58排放值1、2、3、4、5,然后我们将kude52运算符应用于3,这意味着将省略前3个值。结果kude6的出口为4和5。

我们还可以使用更复杂的液体表达式来确定必须省略哪些元素。例如,我们可以使用lambda表达式,该表达式根据元素的属性返回真或错误。

重要的是要记住,如果要省略的要素数量

清楚的

distinct操作员仅发射kude6的唯一值,省略了先前发出的值。

kude63操作员的一般形式如下:

distinct(keySelector?: (value: T) => K, flushes?: Observable<any>): Observable<T>

可选参数kude66是用于为每个元素选择一个iganic键的函数。如果未提供kouude66函数,则值本身用作密钥。

可选参数kude68是一种用于清洁先前发射值的kude6。

让我们以这个示例:

import { of } from 'rxjs';
import { distinct } from 'rxjs/operators';

const source = of(1, 2, 3, 1, 2, 4, 5, 3);
const example = source.pipe(distinct());

example.subscribe(console.log); // salida: 1, 2, 3, 4, 5

在此示例中,我们创建了一个发出值1、2、3、1、2、4、3的kude6,然后使用kude71,然后应用kude63运算符,该操作员将省略重复值并仅发射ânicos。结果kude6的出口为1、2、3、4、5。

我们还可以使用keySelector函数根据元素的某些属性或特征选择一个iginal键。例如,如果我们有一个带有kude76属性的用户对象的kouude6,我们可以使用kuude66函数仅发射使用kude76éºnico的用户对象:



import { of } from 'rxjs';
import { distinct } from 'rxjs/operators';


const users = [
 { id: 1, name: 'Alice },
 { id: 2, name: 'Bob },
 { id: 1, name: 'Charlie },
 { id: 3, name: 'David },
 { id: 2, name: 'Eve }
]
const source = of(users);
const example = source.pipe(distinct(user => user.id));

example.subscribe(console.log); // salida: { id: 1, name: 'Alice}, { id: 2, name 'Bob' }, { id: 3, name: 'David' }

在示例中,我们创建了一个kude6,该kude6发出了数组users中定义的用户对象。然后,我们将Kude63运算符应用于Kuude66函数,该功能选择每个用户对象的Kuude76属性作为唯一的密钥。生成的kude6的出口仅是带有kouude76的用户对象:{id:1,name:'alice},{id:2,name'bob'},{id:3,name:'david'}。 /p >

请务必记住,Kude63运算符使用内部缓存来存储先前发出的值并确定值是否唯一。如果Kude6散发,这可能会导致性能问题。
同样重要的是要强调,kude63运营商使用三重股权运营商相等的===比较发行的值。

独特的未加工

distinctUntilChanged运算符用于仅发布不等于kude6发出的先前值的值省略而不是发射。

kude90操作员的一般形式如下:

distinctUntilChanged(compareFn?: (x: T, y: T) => boolean): MonoTypeOperatorFunction<T>

可选参数compareFn是一个用于比较两个值并确定它们是否相同的函数。如果没有提供Kude93函数,则使用Kude89运算符来比较值。

例如:

import { of } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';

const source = of(1, 1, 2, 3, 3, 3, 4, 4, 5);
const example = source.pipe(distinctUntilChanged());

example.subscribe(console.log); // salida: 1, 2, 3, 4, 5

在此示例中,我们创建了一个kude6,该kude6使用rxjs of函数发出值1、1、2、3、3、4、4、5并发出不等于先前发行的值的值。结果kude6的出口为1、2、3、4、5。

我们还可以使用compareFn函数来自定义值的比较。例如,如果我们有一个带有kude102属性的用户对象的Observable,我们可以使用kuude93函数来省略具有相同名称的用户对象:

import { of } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';


const users = [
 { id: 1, name: 'Alice },
 { id: 2, name: 'Bob },
 { id: 1, name: 'Bob },
 { id: 3, name: 'David },
 { id: 2, name: 'David }
]

const source = of(...users);
const example = source.pipe(distinctUntilChanged((ant, act) => ant.name === act.name));

example.subscribe(console.log); // salida: { id: 1, name: 'Alice}, { id: 2, name 'Bob' }, { id: 3, name: 'David' }

在此示例中,我们创建了一个kude6,该kude6发出了数组user中定义的用户对象,然后,我们将Kuude90运算符应用带有compare函数,该功能仅比较两个连续对象的用户名。生成的kude6的退出是只有名称与上一个值不同的用户对象:{id:1,name:'alice},{id:2,name'bob'},{id:3,name:name:名称:'David'}

独特的nuntilkeychanged

distinctUntilKeyChanged运算符用于基于发出的对象的特定键,仅发布与上一个值不同的值。它与Kude90运算符相似,但它没有比较发行的完整值,而仅比较对象的特定属性的值。

import { of } from 'rxjs';
import { distinctUntilKeyChanged } from 'rxjs/operators';


const users = [
 { id: 1, name: 'Alice },
 { id: 2, name: 'Bob },
 { id: 1, name: 'Bob },
 { id: 3, name: 'David },
 { id: 2, name: 'David }
]

const source = of(...users);
const example = source.pipe(distinctUntilKeyChanged('name');

example.subscribe(console.log); // salida: { id: 1, name: 'Alice}, { id: 2, name 'Bob' }, { id: 3, name: 'David' }

您可以看到,我们必须只指定比较发射对象的键,在这种情况下,键是名称,退出将为{id:1,name:'alice},{id:2,name'bob'bob '},{id:3,名称:'David'}