Властивість 'toPromise' не існує для типу 'Observable <Response>'


76
import { Headers, Http } from '@angular/http';

@Injectable()
export class PublisherService{

    private publishersUrl = 'app/publisher';

    constructor(private http: Http) { }

    getPublishers(): Promise<Publisher[]>{
        return this.http.get(this.publishersUrl)
                   .toPromise()
                   .then(response => response.json().data) 
                   .catch(this.handleError);
    }
}    

Я отримую цю помилку:

Властивість 'toPromise' не існує для типу 'Observable'.any


2
Зазвичай перетворювати спостережувані в обіцянки - це не дуже добре. Спостережувані набагато потужніші
Діністро

1
Будь-хто, хто натрапляє на це (це було для мене найпопулярнішим посиланням Google), дивіться нижче, що походить від однієї із пов’язаних відповідей github.com/Microsoft/TypeScript/issues/ ... Як сказано, у Visual Studio 2015 ви можете виправте це, оновивши свою версію typecript через microsoft.com/en-us/download/details.aspx?id=48593
tony

Відповіді:


158

Вам потрібно додати оператор так:

import 'rxjs/add/operator/toPromise';

Це потрібно для кожного оператора rxjs, якого ви хочете використовувати.


3
будь ласка, оновіть свою відповідь для
angular

10

Спробуйте додати 'Response' до оператора імпорту з '@ angular / http' таким чином:

import {Http, Headers, Response} from '@angular/http';

Також я помітив, що ви не імпортуєте Ingectable з кутового ядра, хоча ви використовуєте декоратор @Injectable.

import { Injectable } from '@angular/core';

Я також оновив systemjs.config.js і дотримувався пропозицій на цій сторінці. Тепер добре.
MiHawk,

привіт MiHawk, що ти оновлював в systemjs.config.js ?, я також стежу за angular.io/docs/ts/latest/tutorial/toh-pt6.html , застряг тут
khoailang

Тож, якою була відповідь, не зазначено, що вирішує цю проблему
Джон Б

1
Я встановив останню версію інструментів TypeScript версії 2.X microsoft.com/en-us/download/details.aspx?id=48593, і це вирішило проблему, але створило 209 інших. Решта виправлення полягала у виході з Visual Studio та запуску> npm upgrade --save (як адміністратор). кілька пакетів не вдалось оновити, але коли я запускаю Visual Studio Bower / npm, автоматично оновив решту, і все добре.
Джон Б

6

використовувати цей імпорт на початку

import {Observable} from "rxjs/Rx";

4
дуже погана ідея, це імпортує всю бібліотеку RXJS, яка насправді велика і значно збільшить час завантаження вашої сторінки.
danday74

Я не думаю, що .. ми використовуємо імпорт {компонента} з "@ angular / core"; багато місць, так що це також повинно бути погано тоді?
імаль хасаранга перера

4
імпортувати {Observable} з 'rxjs / Observable'; це те, що ви хочете ... це імпортує лише Observable, якщо ви зробите rxjs / Rx, тоді він імпортує весь RxJS і використовуватиме лише Observable, що справді сповільнюється. Видаліть усі посилання на rxjs / RX і спостерігайте за значним зменшенням чистих запитів та прискоренням швидкості завантаження сторінки.
danday74
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.