2016-08-24 39 views
23

我試着按照angular.io上的教程(Tour the Heroes) 但是,我試着在一些JSON上做出真正的GET請求。Angular2 - TypeError:this.http.get(...)。toPromise不是一個函數

我的代碼如下所示:

private userUrl = 'https://jsonplaceholder.typicode.com/users'; 
    constructor(private http: Http) {} 

    getUsersHttp(): Promise<User[]> { 
    return this.http.get(this.userUrl) 
     .toPromise() 
     .then(response => response.json().data as User[]) 
     .catch(this.handleError); 
    } 

爲了服務我只導入一些基本的東西:

import { Injectable }  from '@angular/core'; 
import { Headers, Http, Response } from '@angular/http'; 
import { User } from './user'; 

user.tsheroe.ts basicly副本TOH這樣:

export class User { 
    id: number; 
    name: string; 
} 

我如何在服務中調用此特定方法: 首先我儘量多的東西,但在調試時我儘量只CONSOLE.LOG這麼:

console.log(this.userService.getUsersHttp()); 

當頁面加載在控制檯我發現多個錯誤: 第一個是:

EXCEPTION: TypeError: this.http.get(...).toPromise is not a function

第二個是:

EXCEPTION: TypeError: this.http.get(...).toPromise is not a functionBrowserDomAdapter.logError @

服務它看起來很好。我在這一行加入我的服務app.module.ts

providers: [ HTTP_PROVIDERS, UserService ] 

和它的作品,如果我直接與像一些函數返回值(和註釋掉調用getUsertHttp功能):我試圖描述的一切

getUsers() { 
    return [{'id': 1, 'name': 'User1'}, {'id': 2, 'name': 'User2'}]; 
    } 

如果問題有點長,這可能很重要,非常抱歉。 請大家給我提示我做錯了什麼?

+0

你能也粘貼index.html,然後main.ts?也許在填充中缺少core-js或es6-shim。 –

回答

75

看起來你缺少進口:

import 'rxjs/add/operator/toPromise';

+0

嗨@Stefan Svrkota,你是對的我錯過了進口。無論如何,我會將你的問題標記爲正確,但也許有任何暗示爲什麼'this.httpUsers'沒有被解析? (用戶=> this.httpUsers = users) .catch(error => this.error = error);' – Andurit

+2

https://jsonplaceholder.typicode.com/users返回一個json數組,而不是一個會有.data成員的對象 –

+0

謝謝你們兩位,Philippe對此很對, – Andurit

相關問題