【问题标题】:Typescript rxjs Observable array concatTypescript rxjs 可观察数组 concat
【发布时间】:2016-04-12 22:50:57
【问题描述】:

我在使用带有 typescript 的 rxjs Observable.concat 函数时遇到问题。 收到错误“无法读取未定义的属性‘应用’”

问题似乎只存在于打字稿和 可能特定于 rxjs 版本 5 concat。该代码似乎适用于 rxjs V4。

这是说明问题的代码的简化版本...

 /*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');
         });
      }
  }

}

这里是 jsbin: https://jsbin.com/naxeba/edit?html,js,console,output

【问题讨论】:

    标签: javascript typescript rxjs


    【解决方案1】:

    好的,问题解决了。

    对于响应式 js 版本 5 用户的重要说明: 在带有 rxjs 的 typescript 中,为了最小化应用程序大小,必须专门导入每个运算符以包含要包含的函数/运算符。 所以这条线...

    import {concat} from 'rxjs/operators/concat' 必须包含在 typescript 文件的顶部才能使 concat 工作。

    让我感到困惑的是,我在 VS2015 中为 Observable.concat 函数获得了智能感知,即使该函数实际上并没有被导入。

    【讨论】:

      【解决方案2】:

      我使用的是 rxjs 5.5.7,必须使用 import 'rxjs/add/observable/concat';

      代码本身如下所示: Observable.concat(...observables).subscribe etc

      【讨论】:

      • 另外我必须从 'rxjs/Observable' 更改 import { Observable };从 'rxjs' 导入 { Observable };
      猜你喜欢
      • 1970-01-01
      • 2018-03-31
      • 2021-11-01
      • 2016-06-18
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2019-10-18
      相关资源
      最近更新 更多