angular - İşlenmemiş Promise reddi: Rx_1.Subject bir yapıcı değil ; Bölge: ; Görev: Promise.then ; Değer: TypeError: Rx_1.Subject bir yapıcı değil
Bir Angular 2 uygulamam var, bu uygulama systemjs kullanarak eşleştirir/yükler.
Projeye rxjs kütüphanesini import etmek ve ona referans vermek sorun değil, fakat kod deploy edildiğinde bir Subject değişkeni oluşturmaya çalışırken şu mesajla hata veriyor:
"İşlenmemiş Promise reddi: Rx_1.Subject bir yapıcı değildir; Bölge: ; Görev: Promise.then; Değer: TypeError: Rx_1.Subject bir yapıcı değildir."
Systemjs üzerinde 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' }
};
Konuya örneklem yaptığım yol:
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");
Tüm rxjs tarayıcıda sorunsuz yüklendi.
GÜNCELLEME: Buna daha yakından bakarsak, Angular servisime Rx şu şekilde import ediyorsam:
import * as Rx from 'rxjs/Rx';
ve sonra Rx nesnesini konsolda inceleyin, sadece bir varsayılan ve __useDefault özellik alıcısına sahip.
Diğer her şey, Observable, Subject, bunlar aracılığıyla erişilebilir.
Yapmayı sevmek:
var observable = Rx.Observable.create(function (observer) {
observer.next(1);
});
Geri gider ve:
VM1083:1 Yakalanmamış TypeError:
undefinedözelliği 'create' okunamıyor
Oysa ki, elbette:
var observable = Rx.default.Observable.create(function (observer) {
observer.next(1);
});
iyi çalışıyor.
Projem TypeScript'te, hedef derlemeyi ES5 ve ES6 olarak denedim.
Cevap #1
Daha önce 'import { Subject } from 'rxjs/Subject'' olarak ithalat yapıyordum. 'import { Subject } from 'rxjs'' olarak değiştirdim. Bu benim için sorunu çözdü.
Cevap #2
Bu, Subject'in nasıl örneklendiğine dair bir örnektir
@Injectable()
export class MyService {
public invokeEvent:Subject<any> = new Subject();
constructor() {}
}
Gözlemlenebilirler hakkında bu, Gözlemlenebilirleri Kullanmak hakkında harika bir kitaptır.
