链接主题 - RxJS / Angular2

时间:2016-06-06 14:49:42

标签: angular rxjs observable

非常对于可观察者来说是新的,我试图让我的思想围绕一个连锁主题的好方法。从本质上讲,我试图获取一系列可观察数据,这些数据库将发出相同类型并将它们链接在一起,这样,当我在第一个主题上调用next时,每个后续主题(假设没有{{1}发生在两者之间)有机会获取值,操纵它,并将其传递给下一个主题,直到它到达最后一个主题,这将发出最终结果。

我已经推出了自己的课程来处理这个问题,但似乎这个特殊情况会随时出现带有可观察者的情况,所以我想知道是否有人知道任何事情&#39 ; s已经内置到RxJS或Angular2中。

另外,我是否试图迫使受试者做一些他们不打算做的事情?是否有更好的方法将算法链接在一起以这种方式每个函数都有机会在它最终返回之前依次操纵输入,如果我需要可能会出错?我们考虑过什么"最佳实践"在这种情况下?

修改

为了更清楚我在谈论什么,这就像我正在寻找的东西:

error

解决方法

如果将来有人发现这种情况,这是我在var wrapper = Subject.chain(subject1, subject2, subject3) // Subscriptions happen here /** * This calls subject1.next("HI"), * which then calls subject2.next() with the result of subject1's manipulation of "HI", * which then calls subject3.next() with the result of subject2's manipulation of the subject1's manipulation of "HI", * which then emits the result of subject3's manipulation of subject2's manipulation of subject1's manipulation of "HI" */ wrapper.next("HI"); 函数的帮助下使用的解决方法。它并不完美,但它会为我做的事情:

Array.reduce

2 个答案:

答案 0 :(得分:1)

要链接可观察对象,您应该考虑使用flatMapswitchMap等运算符。

以下是HTTP示例:

this.http.get('...')
    .map(res => res.json())
    .flatMap(data => {
      // receive the result of the first request
      // use this result to execute another one
      return this.http.get('...')
              .map(res => res.json());
    }).subscribe(data => {
      // receive the result of the second request
    });

如果您对这方面的好教程感兴趣,可以看看这个:

答案 1 :(得分:1)

你可以使用subscribe链接主题。

subject1
    .subscribe( subject2 );

subject2
    .subscribe( subject3 );

subject3
    .subscribe( x=> {
        // do you want to do
    });