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.

İlgili makaleler