未处理的Promise拒绝:Rx_1.Subject不是构造函数;区域:;任务:Promise.then;值:TypeError:Rx_1.Subject不是构造函数

时间:2017-10-13 22:30:17

标签: typescript rxjs systemjs

我有一个angular2应用程序,它使用systemjs来映射/加载。

在项目中导入rxjs并引用它很好,但是当部署代码时,它无法使用消息构造Subject变量:

  

“未处理的承诺拒绝:Rx_1.Subject不是构造函数;   区域:;任务:Promise.then;值:TypeError:Rx_1。主题是   不是构造函数“。

关于systemjs的Rx:

(function (global) {
var map = {
    'app': 'app',  
    '@angular': 'js/@angular', 
     // other libraries
    'rxjs': 'js/rxjs', 
};

// packages tells the System loader which filename and/or extensions to look for by default (when none are specified) 
var packages = {
    'app': { main: 'main.js', defaultExtension: 'js' },
    'rxjs': { defaultExtension: 'js' }
};

我实例化主题的方式:

import { Injectable } from '@angular/core';
import { Subject } from "rxjs/Rx";

@Injectable()
export class MyService {

constructor(private http: Http) {
    let b = new Subject<string>(); // exteption HERE
    let m = b.asObservable(); 
    b.next("k");

所有rxjs都在浏览器中正常加载。

更新:更多信息,如果我在我的角度服务中导入Rx:

import * as Rx from 'rxjs/Rx';

并检查控制台中的Rx对象,它只有一个默认的__useDefault属性getter。 其他所有东西,Observable,Subject都可以通过它们访问。

喜欢这样做:

var observable = Rx.Observable.create(function (observer) {
        observer.next(1);
    });

回来了:

  

VM1083:1未捕获的TypeError:无法读取未定义的属性“create”

然而,当然:

var observable = Rx.default.Observable.create(function (observer) {
        observer.next(1);
    });

工作正常。

我的项目是打字稿,我尝试过目标编译es5和es6。

3 个答案:

答案 0 :(得分:4)

我之前是从'rxjs / Subject'导入'import {Subject}的。 从'rxjs'更改为'import {Subject}。 这为我解决了这个问题。

答案 1 :(得分:2)

这是如何实例化主题的示例

for (int num = 1; num <= 9; num++) 

关于Observables这是一本关于Using Observables的好书。

答案 2 :(得分:0)

在查看How to import `Observable` from `Rx` (not angular)

后,我设法取消阻止

我将tsconfig.json模块从“system”更改为“commonjs”,并且正在编译Rx lib文件而没有getter。