Spec-Zone.ru › ReactiveX

Concat

выводить выбросы из двух или более Observable без переплетения их
Открыть интерактивную диаграмму на rxmarbles.com

Оператор Concat конкатенирует вывод нескольких Observable, так что они ведут себя как одно Observable, при этом все элементы, выводимые первым Observable, выводятся до любых элементов, выводимых вторым Observable (и так далее, если их больше двух).

Concat ожидает подписки на каждое дополнительное Observable, которое вы передаете ему, до завершения предыдущего Observable. Обратите внимание, что из-за этого, если вы пытаетесь конкатенировать «горячее» Observable, то есть такое, которое начинает выводить элементы сразу и до того, как к нему подключаются, Concat не увидит и, следовательно, не выведет никакие элементы, которые Observable выведет до того, как все предыдущие Observable завершатся и Concat подпишется на «горячее» Observable.

В некоторых реализациях ReactiveX также есть оператор ConcatMap (также известный как concat_all, concat_map, concatMapObserver, for, forIn/for_in, mapcat, selectConcat, или selectConcatObserver) , который преобразует элементы, выводимые исходным Observable, в соответствующие Observable, а затем конкатенирует элементы, выводимые каждым из этих Observable в порядке их наблюдения и преобразования.

Оператор StartWith похож на Concat, но добавляет, а не добавляет, элементы или выбросы элементов к тем, которые выводит исходное Observable.

Оператор Merge также похож. Он объединяет выбросы двух или более Observable, но может их переплетать, в то время как Concat никогда не переплетает выбросы от нескольких Observable.

См. также

  • Catch
  • Merge
  • StartWith
  • Введение в Rx: Concat
  • RxMarbles: concat
  • 101 Rx Samples: Concat — холодное observable
  • 101 Rx Samples: Concat — горячее observable
  • Загрузка данных из нескольких источников с RxJava Дэна Лева (пример с использованием Concat и First)

Информация, специфичная для языка

RxClojure concat concat*

concat

В RxClojure concat соединяет несколько отдельных Observable-объектов в заданном порядке.

concat*

Оператор concat* соединяет Observable-объекты, испускаемые другим Observable-объектом, в порядке их испускания.

RxCpp concat

RxCpp реализует этот оператор как concat:

concat

RxGroovy concat concatWith

concat

RxGroovy реализует этот оператор как concat. Существуют варианты этого оператора, принимающие от двух до девяти Observable-объектов в качестве параметров и соединяющие их в порядке указания в списке параметров. Также есть вариант, принимающий Observable-объект Observable-объектов и соединяющий каждый из этих Observable-объектов в порядке их испускания.

Пример кода

odds  = Observable.from([1, 3, 5, 7]);
evens = Observable.from([2, 4, 6]);

Observable.concat(odds, evens).subscribe(
  { println(it); },                          // onNext
  { println("Error: " + it.getMessage()); }, // onError
  { println("Sequence complete"); }          // onCompleted
);
1
3
5
7
2
4
6
Sequence complete
  • Javadoc: concat(Observable<Observable>)
  • Javadoc: concat(Observable,Observable) (также существуют версии, принимающие до девяти Observable-объектов)

Также есть метод экземпляра concatWith, такой, что Observable.concat(a,b) эквивалентно a.concatWith(b).

  • Javadoc: concatWith(Observable)

RxJava 1․x concat concatWith

concat

RxJava реализует этот оператор как concat. Существуют варианты этого оператора, принимающие от двух до девяти Observable-объектов в качестве параметров и соединяющие их в порядке указания в списке параметров. Также есть вариант, принимающий Observable-объект Observable-объектов и соединяющий каждый из этих Observable-объектов в порядке их испускания.

  • Javadoc: concat(Observable<Observable>)
  • Javadoc: concat(Observable,Observable) (также существуют версии, принимающие до девяти Observable-объектов)

Также есть метод экземпляра concatWith, такой, что Observable.concat(a,b) эквивалентно a.concatWith(b).

  • Javadoc: concatWith(Observable)

RxJS concat concatAll

RxJS реализует этот оператор как concat и concatAll.

concat

concat принимает переменное число Observable-объектов (или Promise) в качестве параметров (или один массив Observable-объектов или Promise) и соединяет их в порядке указания в списке параметров (или массиве). Он существует как метод прототипа Observable, так и как метод экземпляра.

concatAll

concatAll — это метод экземпляра, который работает с Observable-объектом Observable-объектов, соединяя каждый из этих Observable-объектов в порядке их испускания.

concat и concatAll можно найти в каждом из следующих дистрибутивов:

  • rx.js
  • rx.all.js
  • rx.all.compat.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js

RxKotlin concat concatWith

concat

RxKotlin реализует этот оператор как concat. Существуют варианты этого оператора, принимающие от двух до девяти Observable-объектов в качестве параметров и соединяющие их в порядке указания в списке параметров. Также есть вариант, принимающий Observable-объект Observable-объектов и соединяющий каждый из этих Observable-объектов в порядке их испускания.

Также есть метод экземпляра concatWith, такой, что Observable.concat(a,b) эквивалентно a.concatWith(b).

RxNET Concat

Concat

Rx.NET реализует этот оператор как Concat. Он принимает либо перечислимый список Observable-объектов, либо Observable-объект Observable-объектов, либо два Observable-объекта в качестве параметров и соединяет их в заданном порядке.

RxPHP concat concatAll

RxPHP реализует этот оператор как concat.

Объединяет последовательность observable-объектов в конец исходного observable-объекта.

Пример кода

//from https://github.com/ReactiveX/RxPHP/blob/master/demo/concat/concat.php


$source1 = \Rx\Observable::of(42);
$source2 = \Rx\Observable::of(56);

$source = \Rx\Observable::empty()->concat($source1)->concat($source2);

$subscription = $source->subscribe($stdoutObserver);
Next value: 42
Next value: 56
Complete!

RxPHP также имеет оператор concatAll.

Объединяет последовательность observable-объектов в один observable-объект.

Пример кода

//from https://github.com/ReactiveX/RxPHP/blob/master/demo/concat/concatAll.php

$source = Rx\Observable::range(0, 3)
    ->map(function ($x) {
        return \Rx\Observable::range($x, 3);
    })
    ->concatAll();

$subscription = $source->subscribe($stdoutObserver);
Next value: 0
Next value: 1
Next value: 2
Next value: 1
Next value: 2
Next value: 3
Next value: 2
Next value: 3
Next value: 4
Complete!

RxPY concat concatAll

concat

В RxPY concat принимает переменное количество Observable-объектов в качестве параметров (или массив Observable-объектов) и объединяет их в порядке, заданном в списке параметров (или массиве).

concat_all

concatAll работает с Observable-объектом Observable-объектов, объединяя каждый из этих Observable-объектов в порядке их испускания.

Rxrb concat merge_all

concat

В Rx.rb оператор concat работает с двумя Observable-объектами как оператор экземпляра или с массивом Observable-объектов как метод класса.

merge_all

Оператор merge_all несмотря на название, по сути, ведет себя как вариант Concat в Rx.rb. Он принимает Observable-объект Observable-объектов в качестве параметра и объединяет испускания этих Observable-объектов.

RxScala concat ++

RxScala реализует этот оператор двумя способами. Существует оператор concat, который принимает Observable-объект Observable-объектов в качестве параметра и объединяет каждый из этих Observable-объектов в порядке их испускания. Также есть оператор ++, который объединяет один Observable-объект с другим.

plus-plus

© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/concat.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API