RXJS可观察变换数组到多个值

时间:2017-06-13 06:37:00

标签: angular rxjs

我正在制作一个Angular 2 HTTP get请求,作为回报,我得到了 Observable<Message[]>我想将这个observable转换为多个emit。 所以假设服务器返回长度为3的Message数组。 我希望在我的订阅调用中获得3个通知(对于数组中的每个值),而不是使用数组进行一次调用。

例如: ['你好','嘿','你好'] - &gt; '你好','嘿','你好'

我找到了一个运算符,它确实转换了数组(Observable.for),,但是这个运算符将一个数组作为参数,而不是一个Observable。

3 个答案:

答案 0 :(得分:4)

您可以使用concatAll运算符展平数组(mergeAll也可以使用)。

Observable.of(['Hello','Hey','Howdy'])
  .concatAll()
  .subscribe(console.log)

请参阅演示:https://jsbin.com/gaxajex/3/edit?js,console

答案 1 :(得分:1)

试试这个:

Observable.from(yourRequest())
    .flatMap(msgList => Observable.from(msgList))
    .subscribe(msg => console.log(msg));
在这种情况下,

yourRequest()应返回数组。

如果yourRequest()返回Observable,则:

yourRequest().flatMap(msgList => Observable.from(msgList))
    .subscribe()

答案 2 :(得分:0)

如果我理解你,你想使用像concatMap这样的东西。通过使用concatMap,您可以将值(Message数组)映射到内部observable,然后您可以按顺序订阅这些值。

yourRequest.concatMap(i: Message => Observable.of(i)).subscribe(i => {
     //sendNotification(i);
});

您还可以查看this page

我希望它有所帮助!