Dzhavat Ushev

Twitter GitHub RSS

New in RxJS v7: concatWith operator

RxJS v7-alpha.1 was released a couple of weeks ago and while it’s exciting to see v7 slowing coming along, this release came with only one new feature. It’s an operator called concatWith.

In this short post I’m going to show you how this operator works.

Unfortunately the only available documentation about concatWith right now is in the source code. Here’s how it works:

Emits all of the values from the source observable, then, once it completes, subscribes to each observable source provided, one at a time, emitting all of their values, and not subscribing to the next one until it completes.

Let’s translate this to an example (StackBlitz):

import { of } from 'rxjs';
import { concatWith } from 'rxjs/operators';

const source = of('RxJS', 'is').pipe(concatWith(of('awesome!')));

source.subscribe(x => console.log(x));

// Output:
// RxJS
// is
// awesome!

If you’ve used the concat operator before this might look somehow familiar to you. This is not a coincidence. concatWith is actually not a completely new operator. It’s only meant to replace the concat operator which is currently marked as deprecated and will be removed in v8.

There’s one subtle difference between the two, though. concatWith only accepts inputs of type ObservableInput, whereas concat can also take a scheduler.

If you want to schedule the observable provided to concatWith, you need pass it to the scheduled function and also specify a scheduler. (StackBlitz)

Hope you learned something new. Happy RxJS-ing!

Thanks to Jan-Niklas Wortmann and Lars Gyrup Brink Nielsen for the review.

Share on Twitter