2016-05-13 13 views
5

Mój kod jestdlaczego mam this.http.get (...). Subskrybować nie jest funkcją w angular2

 
    import 'rxjs/Rx'; 
    ... 
    let _this = this; 
    return new Promise(function(resolve, reject) { 
     _this.http[method](url, data, { 
      headers: headers 
     }) 
     .toPromise() 
     .then(
      (data) => { 
       resolve(data); 
      }, 
      error => { 
       reject(error); 
      } 
     ); 
    }); 

W „zapisz” nie pochodzą z mojego kodu, wygląda na to, że to coś oryginalnego kątowa .

Komunikat o błędzie:

 
EXCEPTION: Error: Uncaught (in promise): TypeError: _this.http.get(...).subscribe is not a function 
+4

Nie musisz 'niech _this = this' jeśli używasz' (postanowienie, odrzucić) => { 'zamiast. Nie potrzebujesz 'nowej obietnicy (...)' podczas używania 'toPromise()'. Po prostu 'return this.http [method] (adres URL, dane, { } nagłówki: nagłówki }) .toPromise();' powinny zrobić to samo. –

+0

Zdecydowanie zgadzam się z Günter! Jeśli chodzi o twój błąd, której wersji Angular2 używasz? Próbowałem z beta17, ale nie mam błędu: https://plnkr.co/edit/TPy2UVEE8EE4MLTlf8yc?p=preview. –

+0

becoz Mam kilka kroków w „potem”, zainstalować kątowy z jonowym beta – nbsp

Odpowiedz

1

Jesteś zwalczania inicjatywę Angular2 z przeniesieniem nad od promise asynchronicznego paradygmatu opartego na reactive-extensions alternatywy. Zamiast korzystać z obietnicy, użyj zamiast subscribe:

import 'rxjs/Rx'; 
... 
invoke<T>(onNext: (data: T) => void, onError: (error: any) => any) { 
    this.http[method](url, data, { 
     headers: headers 
    }) 
    .map(response => response.json() as T) 
    .subscribe(onNext, onError); 
}); 

napisałem na blogu o tym też.

https://ievangelist.github.io/blog/angular-2-http/