2017-12-12 140 views
5

Niedawno zdecydowałem się na migrację dużego projektu, który został stworzony od zera z "Quick Start" Angular do wersji wykorzystującej Angular CLI 1.5.5. Teraz naprawiam różne problemy, które się pojawiają i nie mogę tego naprawić.Nie mogę już używać forkdalein z rxjs 5.5.2

Czytałem, że lepiej jest używać operatorów serwerów rxjs, co zrobiłem i działa to bardzo dobrze. Jednak mam również te linie kodu:

import { Observable } from "rxjs/Observable"; 
import "rxjs/add/observable/forkjoin"; 

... 

let piecesGrouping$: Observable<IGroupedPiece[]>[] = deliveries.map(delivery => this._pieceService.getGroupedPieces(delivery.pieces)); 

Observable 
    .forkJoin(...piecesGrouping$) 
    .subscribe((groups) => { 
    groups.forEach((group, i) => deliveries[i].groupedPieces = group); 

    resolve(); 
    }); 

Oni pracują bardzo dobrze w poprzedniej wersji, która została przy użyciu rxjs 5.4.3, teraz z rxjs 5.5.2, nie więcej i uzyskać następujący błąd:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'apply' of undefined TypeError: Cannot read property 'apply' of undefined

próbowałem zastąpić operatora rozpowszechniane przez piecesGrouping$[0], piecesGrouping$[1] jako błąd nie mówią nic o forkJoin sam w sobie, a następnie uzyskać:

ERROR Error: Uncaught (in promise): TypeError: WEBPACK_IMPORTED_MODULE_8_rxjs_Observable.a.forkJoin is not a function TypeError: WEBPACK_IMPORTED_MODULE_8_rxjs_Observable.a.forkJoin is not a function

Wygląda więc na to, że importuję niewłaściwy sposób: forkJoin. Próbowałem zaimportować go z "rxjs/observable/forkJoin", ale to też nie działało.

Czego mi brakuje?

Odpowiedz

10

Nie używaj Observable łatania, użyj forkJoin bezpośrednio:

import {forkJoin} from "rxjs/observable/forkJoin"; 

forkJoin(...piecesGrouping$).subscribe() 
+0

@ssougnez, nie ma za co. Jak sugerowałem, nie używaj importowania łatek. Użyj operatorów do wynajęcia dla operatorów instancji i operatorów statycznych bezpośrednio. –

1

Należy go używać jako funkcja

forkJoin(...piecesGrouping$) 
    .subscribe((groups) => { 
    groups.forEach((group, i) => deliveries[i].groupedPieces = group); 

    resolve(); 
    }); 

oświadczenie import zmienia się jak

import { forkJoin } from "rxjs/observable/forkJoin"; 

Ten został wydany jako część 5.2 wersji. Przeczytaj change log

+0

Dzięki, to działa, chociaż ja zaakceptować odpowiedź „AngularInDepth.com”, jak również umieścić zmodyfikowany importuj linię. – ssougnez