Skip to content

Commit d293245

Browse files
committed
feat(mergeMap|concatMap|concatMapTo): simplified the signatures
BREAKING CHANGE: mergeMap, concatMap and concatMapTo no longer support a result selector, if you need to use a result selector, use the following pattern: `source.mergeMap(x => of(x + x).pipe(map(y => y + x))` (the pattern would be the same for `concatMap`).
1 parent 52cdfe8 commit d293245

File tree

10 files changed

+36
-545
lines changed

10 files changed

+36
-545
lines changed

spec/operators/concatMap-spec.ts

Lines changed: 4 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@ describe('Observable.prototype.concatMap', () => {
538538
expectSubscriptions(e1.subscriptions).toBe(e1subs);
539539
});
540540

541+
<<<<<<< HEAD
541542
it('should concatMap many outer to inner arrays, using resultSelector', () => {
542543
const e1 = hot('2-----4--------3--------2-------|');
543544
const e1subs = '^ !';
@@ -573,6 +574,8 @@ describe('Observable.prototype.concatMap', () => {
573574
expectSubscriptions(e1.subscriptions).toBe(e1subs);
574575
});
575576

577+
=======
578+
>>>>>>> feat(mergeMap|concatMap|concatMapTo): simplified the signatures
576579
it('should mergeMap many outer to inner arrays, outer unsubscribed early', () => {
577580
const e1 = hot('2-----4--------3--------2-------|');
578581
const e1subs = '^ ! ';
@@ -585,19 +588,6 @@ describe('Observable.prototype.concatMap', () => {
585588
expectSubscriptions(e1.subscriptions).toBe(e1subs);
586589
});
587590

588-
it('should concatMap many outer to inner arrays, resultSelector, outer unsubscribed', () => {
589-
const e1 = hot('2-----4--------3--------2-------|');
590-
const e1subs = '^ ! ';
591-
const unsub = ' ! ';
592-
const expected = '(44)--(8888)-- ';
593-
594-
const result = e1.concatMap((value) => arrayRepeat(value, +value),
595-
(x, y) => String(parseInt(x) + parseInt(y)));
596-
597-
expectObservable(result, unsub).toBe(expected);
598-
expectSubscriptions(e1.subscriptions).toBe(e1subs);
599-
});
600-
601591
it('should concatMap many outer to inner arrays, project throws', () => {
602592
const e1 = hot('2-----4--------3--------2-------|');
603593
const e1subs = '^ ! ';
@@ -615,45 +605,7 @@ describe('Observable.prototype.concatMap', () => {
615605
expectObservable(result).toBe(expected);
616606
expectSubscriptions(e1.subscriptions).toBe(e1subs);
617607
});
618-
619-
it('should concatMap many outer to inner arrays, resultSelector throws', () => {
620-
const e1 = hot('2-----4--------3--------2-------|');
621-
const e1subs = '^ ! ';
622-
const expected = '(44)--(8888)---# ';
623-
624-
const result = e1.concatMap((value) => arrayRepeat(value, +value),
625-
(inner, outer) => {
626-
if (outer === '3') {
627-
throw 'error';
628-
}
629-
return String(parseInt(outer) + parseInt(inner));
630-
});
631-
632-
expectObservable(result).toBe(expected);
633-
expectSubscriptions(e1.subscriptions).toBe(e1subs);
634-
});
635-
636-
it('should concatMap many outer to inner arrays, resultSelector, project throws', () => {
637-
const e1 = hot('2-----4--------3--------2-------|');
638-
const e1subs = '^ ! ';
639-
const expected = '(44)--(8888)---# ';
640-
641-
let invoked = 0;
642-
const result = e1.concatMap((value) => {
643-
invoked++;
644-
if (invoked === 3) {
645-
throw 'error';
646-
}
647-
return arrayRepeat(value, +value);
648-
}, (inner, outer) => {
649-
return String(parseInt(outer) + parseInt(inner));
650-
});
651-
652-
expectObservable(result).toBe(expected);
653-
expectSubscriptions(e1.subscriptions).toBe(e1subs);
654-
});
655-
656-
it('should map values to constant resolved promises and concatenate', (done) => {
608+
it('should map values to constant resolved promises and concatenate', (done: MochaDone) => {
657609
const source = Rx.Observable.from([4, 3, 2, 1]);
658610
const project = (value: number) => Observable.from(Promise.resolve(42));
659611

@@ -714,52 +666,4 @@ describe('Observable.prototype.concatMap', () => {
714666
done(new Error('Subscriber complete handler not supposed to be called.'));
715667
});
716668
});
717-
718-
it('should concatMap values to resolved promises with resultSelector', (done) => {
719-
const source = Rx.Observable.from([4, 3, 2, 1]);
720-
const resultSelectorCalledWith: number[][] = [];
721-
const project = (value: number, index: number) => Observable.from((Promise.resolve([value, index])));
722-
723-
const resultSelector = function (outerVal: any, innerVal: any, outerIndex: any, innerIndex: any): number {
724-
resultSelectorCalledWith.push([].slice.call(arguments));
725-
return 8;
726-
};
727-
728-
const results: number[] = [];
729-
const expectedCalls = [
730-
[4, [4, 0], 0, 0],
731-
[3, [3, 1], 1, 0],
732-
[2, [2, 2], 2, 0],
733-
[1, [1, 3], 3, 0]
734-
];
735-
source.concatMap(project, resultSelector).subscribe(
736-
(x) => {
737-
results.push(x);
738-
}, (err) => {
739-
done(new Error('Subscriber error handler not supposed to be called.'));
740-
}, () => {
741-
expect(results).to.deep.equal([8, 8, 8, 8]);
742-
expect(resultSelectorCalledWith).to.deep.equal(expectedCalls);
743-
done();
744-
});
745-
});
746-
747-
it('should concatMap values to rejected promises with resultSelector', (done) => {
748-
const source = Rx.Observable.from([4, 3, 2, 1]);
749-
const project = (value: number, index: number) => Observable.from(Promise.reject('' + value + '-' + index));
750-
751-
const resultSelector = () => {
752-
throw 'this should not be called';
753-
};
754-
755-
source.concatMap(project, resultSelector).subscribe(
756-
(x) => {
757-
done(new Error('Subscriber next handler not supposed to be called.'));
758-
}, (err) => {
759-
expect(err).to.deep.equal('4-0');
760-
done();
761-
}, () => {
762-
done(new Error('Subscriber complete handler not supposed to be called.'));
763-
});
764-
});
765669
});

spec/operators/concatMapTo-spec.ts

Lines changed: 1 addition & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -252,16 +252,6 @@ describe('Observable.prototype.concatMapTo', () => {
252252
expectObservable(result).toBe(expected);
253253
});
254254

255-
it('should concatMapTo many outer to inner arrays, using resultSelector', () => {
256-
const e1 = hot('2-----4--------3--------2-------|');
257-
const expected = '(2345)(4567)---(3456)---(2345)--|';
258-
259-
const result = e1.concatMapTo(['0', '1', '2', '3'],
260-
(x, y) => String(parseInt(x) + parseInt(y)));
261-
262-
expectObservable(result).toBe(expected);
263-
});
264-
265255
it('should concatMapTo many outer to inner arrays, and outer throws', () => {
266256
const e1 = hot('2-----4--------3--------2-------#');
267257
const expected = '(0123)(0123)---(0123)---(0123)--#';
@@ -271,16 +261,6 @@ describe('Observable.prototype.concatMapTo', () => {
271261
expectObservable(result).toBe(expected);
272262
});
273263

274-
it('should concatMapTo many outer to inner arrays, resultSelector, outer throws', () => {
275-
const e1 = hot('2-----4--------3--------2-------#');
276-
const expected = '(2345)(4567)---(3456)---(2345)--#';
277-
278-
const result = e1.concatMapTo(['0', '1', '2', '3'],
279-
(x, y) => String(parseInt(x) + parseInt(y)));
280-
281-
expectObservable(result).toBe(expected);
282-
});
283-
284264
it('should mergeMap many outer to inner arrays, outer unsubscribed early', () => {
285265
const e1 = hot('2-----4--------3--------2-------|');
286266
const unsub = ' !';
@@ -291,32 +271,7 @@ describe('Observable.prototype.concatMapTo', () => {
291271
expectObservable(result, unsub).toBe(expected);
292272
});
293273

294-
it('should concatMapTo many outer to inner arrays, resultSelector, outer unsubscribed', () => {
295-
const e1 = hot('2-----4--------3--------2-------|');
296-
const unsub = ' !';
297-
const expected = '(2345)(4567)--';
298-
299-
const result = e1.concatMapTo(['0', '1', '2', '3'],
300-
(x, y) => String(parseInt(x) + parseInt(y)));
301-
302-
expectObservable(result, unsub).toBe(expected);
303-
});
304-
305-
it('should concatMapTo many outer to inner arrays, resultSelector throws', () => {
306-
const e1 = hot('2-----4--------3--------2-------|');
307-
const expected = '(2345)(4567)---#';
308-
309-
const result = e1.concatMapTo(['0', '1', '2', '3'], (x, y) => {
310-
if (x === '3') {
311-
throw 'error';
312-
}
313-
return String(parseInt(x) + parseInt(y));
314-
});
315-
316-
expectObservable(result).toBe(expected);
317-
});
318-
319-
it('should map values to constant resolved promises and concatenate', (done) => {
274+
it('should map values to constant resolved promises and concatenate', (done: MochaDone) => {
320275
const source = Rx.Observable.from([4, 3, 2, 1]);
321276

322277
const results: number[] = [];
@@ -348,54 +303,4 @@ describe('Observable.prototype.concatMapTo', () => {
348303
done(new Error('Subscriber complete handler not supposed to be called.'));
349304
});
350305
});
351-
352-
it('should concatMapTo values to resolved promises with resultSelector', (done) => {
353-
const source = Rx.Observable.from([4, 3, 2, 1]);
354-
const resultSelectorCalledWith: number[][] = [];
355-
const inner = Observable.from(Promise.resolve(42));
356-
const resultSelector = function (outerVal: number, innerVal: number, outerIndex: number, innerIndex: number) {
357-
resultSelectorCalledWith.push([].slice.call(arguments));
358-
return 8;
359-
};
360-
361-
const results: number[] = [];
362-
const expectedCalls = [
363-
[4, 42, 0, 0],
364-
[3, 42, 1, 0],
365-
[2, 42, 2, 0],
366-
[1, 42, 3, 0]
367-
];
368-
source.concatMapTo(inner, resultSelector).subscribe(
369-
(x) => {
370-
results.push(x);
371-
},
372-
(err) => {
373-
done(new Error('Subscriber error handler not supposed to be called.'));
374-
},
375-
() => {
376-
expect(results).to.deep.equal([8, 8, 8, 8]);
377-
expect(resultSelectorCalledWith).to.deep.equal(expectedCalls);
378-
done();
379-
});
380-
});
381-
382-
it('should concatMapTo values to rejected promises with resultSelector', (done) => {
383-
const source = Rx.Observable.from([4, 3, 2, 1]);
384-
const inner = Observable.from(Promise.reject(42));
385-
const resultSelector = () => {
386-
throw 'this should not be called';
387-
};
388-
389-
source.concatMapTo(inner, resultSelector).subscribe(
390-
(x) => {
391-
done(new Error('Subscriber next handler not supposed to be called.'));
392-
},
393-
(err) => {
394-
expect(err).to.equal(42);
395-
done();
396-
},
397-
() => {
398-
done(new Error('Subscriber complete handler not supposed to be called.'));
399-
});
400-
});
401306
});

0 commit comments

Comments
 (0)