2016-04-12 3 views
0

У меня возникли проблемы с использованием функции rxjs Observable.concat с машинописным текстом. Получение ошибки «Невозможно прочитать свойство» применить «неопределенного»Typcript rxjs Наблюдаемый массив 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

ответ

4

ОК, проблема решена.

Важное замечание для пользователей реактивной js версии 5: В машинописном тексте с rxjs для минимизации размера приложения каждый оператор должен быть специально импортирован для включения функции/оператора. Итак, строка ...

import {concat} из 'rxjs/операторов/concat' должен быть указан в верхней части файла машинописного текста для выполнения concat.

Что меня смутило, так это то, что я получал intellisense в VS2015 для функции Observable.concat, хотя функция фактически не была импортирована.

Смежные вопросы