Rxjs 等待一组发射在可见光中发生

Rxjs 等待一组发射在可见光中发生,rxjs,Rxjs,给定一个将项目推入可观察a的流 当一个数据库中正好有3个项目时,如何通知订阅者 要将其可视化: --o--i--o------i---------o----i------|---> A 我需要等待所有I到达,即使存在其他项目,如o 如果在一个时间范围内没有准确地推送3个is,则触发一个错误以重做该过程 谢谢。我将只过滤I字符,统计所有发出的项目,直到源代码完成,并确定项目数是否正确,最终抛出错误 import {Observable} from 'rxjs'; Observable.f

给定一个将项目推入可观察a的流

当一个数据库中正好有3个项目时,如何通知订阅者

要将其可视化:

--o--i--o------i---------o----i------|---> A
我需要等待所有
I
到达,即使存在其他项目,如
o

如果在一个时间范围内没有准确地推送3个
i
s,则触发一个错误以重做该过程

谢谢。

我将只过滤
I
字符,统计所有发出的项目,直到源代码完成,并确定项目数是否正确,最终抛出错误

import {Observable} from 'rxjs';

Observable.from(['o', 'i', 'o', 'i', 'o', 'i'/*, 'i'*/])
    .filter(val => val == 'i')
    .count()
    .concatMap(count => count == 3 ? Observable.of(count) : Observable.throw('Expected 3 values'))
    .subscribe(
        count => console.log(count),
        err => console.log(err)
    );
它将打印到控制台:

3
如果您在可观察的源中再添加一个
i
,订户将收到一个错误:

Expected 3 values
见现场演示:

如果您想在发生错误时重新订阅,请使用或。另一个演示首先失败,因为它只包含2个
i
s,但它使用
retry()
重新订阅,然后成功

这里有一个更复杂的演示:

我将使用它只过滤
I
字符,对源代码完成之前发出的所有项目进行计数,并确定项目数是否正确,最终抛出错误

import {Observable} from 'rxjs';

Observable.from(['o', 'i', 'o', 'i', 'o', 'i'/*, 'i'*/])
    .filter(val => val == 'i')
    .count()
    .concatMap(count => count == 3 ? Observable.of(count) : Observable.throw('Expected 3 values'))
    .subscribe(
        count => console.log(count),
        err => console.log(err)
    );
它将打印到控制台:

3
如果您在可观察的源中再添加一个
i
,订户将收到一个错误:

Expected 3 values
见现场演示:

如果您想在发生错误时重新订阅,请使用或。另一个演示首先失败,因为它只包含2个
i
s,但它使用
retry()
重新订阅,然后成功

下面是更复杂的演示: