Unhandled Promise rejection: Rx_1.Subject is not a constructor ; Zone: ; Task: Promise.then ; Value: TypeError: Rx_1.Subject is not a constructor
Unhandled Promise rejection: Rx_1.Subject is not a constructor ; Zone: ; Task: Promise.then ; Value: TypeError: Rx_1.Subject is not a constructor
我有一个 Angular 2 应用程序,它使用 systemjs
到 map/load。
在项目中导入rxjs
,并引用它是可以的,但是部署代码时,无法构造一个Subject
变量,消息:
"Unhandled Promise rejection: Rx_1.Subject is not a constructor ;
Zone: ; Task: Promise.then ; Value: TypeError: Rx_1.Subject is
not a constructor".
在 systemjs 上接收:
(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
都在浏览器中正常加载。
更新:再看看这个,如果我在我的 Angular 服务中导入 Rx
为:
import * as Rx from 'rxjs/Rx';
然后检查控制台中的 Rx
对象,它只有一个默认值,并且 __useDefault
属性 getter。
其他一切,Observable,Subject 都可以通过它们访问。
喜欢做:
var observable = Rx.Observable.create(function (observer) {
observer.next(1);
});
返回:
VM1083:1 Uncaught TypeError: Cannot read property 'create' of undefined
而当然:
var observable = Rx.default.Observable.create(function (observer) {
observer.next(1);
});
工作正常。
我的项目是在 Typescript 中,我尝试了目标编译 es5
和 es6
。
这是如何实例化 Subject 的示例
@Injectable()
export class MyService {
public invokeEvent:Subject<any> = new Subject();
constructor() {}
}
关于 Observables 这是一本关于 Using Observables 的好书。
看完How to import `Observable` from `Rx` (not angular)
成功解封
我将 tsconfig.json 模块从 "system" 更改为 "commonjs",并且 Rx lib 文件在没有 getter 的情况下进行转译。
我之前正在导入“从 'rxjs/Subject' 导入 { Subject }”。
更改为“从 'rxjs' 导入 { 主题}”。
这为我解决了问题。
我有一个 Angular 2 应用程序,它使用 systemjs
到 map/load。
在项目中导入rxjs
,并引用它是可以的,但是部署代码时,无法构造一个Subject
变量,消息:
"Unhandled Promise rejection: Rx_1.Subject is not a constructor ; Zone: ; Task: Promise.then ; Value: TypeError: Rx_1.Subject is not a constructor".
在 systemjs 上接收:
(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
都在浏览器中正常加载。
更新:再看看这个,如果我在我的 Angular 服务中导入 Rx
为:
import * as Rx from 'rxjs/Rx';
然后检查控制台中的 Rx
对象,它只有一个默认值,并且 __useDefault
属性 getter。
其他一切,Observable,Subject 都可以通过它们访问。
喜欢做:
var observable = Rx.Observable.create(function (observer) {
observer.next(1);
});
返回:
VM1083:1 Uncaught TypeError: Cannot read property 'create' of
undefined
而当然:
var observable = Rx.default.Observable.create(function (observer) {
observer.next(1);
});
工作正常。
我的项目是在 Typescript 中,我尝试了目标编译 es5
和 es6
。
这是如何实例化 Subject 的示例
@Injectable()
export class MyService {
public invokeEvent:Subject<any> = new Subject();
constructor() {}
}
关于 Observables 这是一本关于 Using Observables 的好书。
看完How to import `Observable` from `Rx` (not angular)
成功解封我将 tsconfig.json 模块从 "system" 更改为 "commonjs",并且 Rx lib 文件在没有 getter 的情况下进行转译。
我之前正在导入“从 'rxjs/Subject' 导入 { Subject }”。 更改为“从 'rxjs' 导入 { 主题}”。 这为我解决了问题。