3

I am having trouble using rxjs Observable.concat function with typescript. Getting an error "Cannot read property 'apply' of undefined"

The problem seems to be only within typescript and may be specific to rxjs version 5 concat. The code seems to work with rxjs V4.

Here is a simplified version of the code illustrating the problem...

 /*jshint esnext: true */

console.clear();
console.log('started');
class test{
    observableArray: Observable<any>[]=[];

    constructor(){
        this.observableArray.push(Rx.Observable.return("Line 1"));
        this.observableArray.push(Rx.Observable.return(56));
        this.observableArray.push(Rx.Observable.create((observer)=>{
             setTimeout(()=>{
                try{
                    observer.onNext("Waited for");
                    observer.onCompleted();
                }
                catch(err){
                     observer.onError(err);
                }
             },3000);
         }));
      }

    run(){
         // ... indeterminate number of observables pushed into array.
         // The problem lies below
         var source = Rx.Observable.concat(...this.observableArray);
         // seems to transpile into js: source =   Observable_1.Observable.concat.apply(Observable_1.Observable, this.observableArray);
         // In the chrome debugger I am getting error: Cannot read property 'apply' of undefined      

         var subscription = source.subscribe(
             function (x) {
                 console.log('Next: ' + x);
             },
             function (err) {
                 console.error('Error: ' + err);
             },
             function () {
                 console.log('Completed');
         });
      }
  }

}

Here is the jsbin: https://jsbin.com/naxeba/edit?html,js,console,output

2 Answers 2

6

OK, Problem solved.

Important note for users of reactive js version 5: In typescript with rxjs, to minimize app size each operator must be specifically imported for the function/operator to be included. So the line...

import {concat} from 'rxjs/operators/concat' must be inlcuded at the top of the typescript file for concat to work.

What confused me was that I was getting intellisense in VS2015 for the Observable.concat function even though the function had not actually been imported.

Sign up to request clarification or add additional context in comments.

Comments

2

I'm using rxjs 5.5.7 and had to use import 'rxjs/add/observable/concat';.

The code itself looks like: Observable.concat(...observables).subscribe etc

1 Comment

Additionally I had to change import { Observable } from 'rxjs/Observable'; to import { Observable } from 'rxjs';

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.