angular – rxjs / Observable:获取第一个流后运行一次函数(连续可观察)

前端之家收集整理的这篇文章主要介绍了angular – rxjs / Observable:获取第一个流后运行一次函数(连续可观察)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,抱歉长标题.

我试图从angularfire2订阅forEach的连续流数组,但我还想在确认第一组数据进入后运行一个函数

this.people.forEach((person) => {
    person.items = this.database.list('/items' + person.key);
    person.items.subscribe((data) => {person.itemsList = data});
});

myIntendedFunction();

有没有办法放置myIntendedFunction(),以便:

>它在每个人收到第一个数据流后运行,并且
>它只运行一次?

解决方法

如果您不希望第一次请求发生两次,则执行起来会有点复杂:

const connectables: ConnectableObservable<any>[] = [];

this.people.forEach(person => {
    person.items = this.database.list('/items' + person.key);
    const connectable = person.items.publish();
    connectables.push(connectable);
    connectable.subscribe((data) => {person.itemsList = data});
});

Observable.zip(...connectables).take(1).subscribe(myIntendedFunction);

connectables.forEach(c => c.connect());

这里发生的是:publish()的效果基本上是您可以多次订阅相同的数据流.在调用connect()之前,不会调用订阅函数.
如果我们使用person.items.share()这是person.items.publish().connect()的糖,它会立即发出请求,我们的应用程序可能因种族条件而出错.

zip()等待每个传递的observable发出一个项目,并作为一个数组一次性发出这些项目.我们只希望这发生在第一组项目上,所以我们只需要(1).

猜你在找的Angularjs相关文章