Не могу найти имя Обещание

У меня проблемы с использованием Promise в angular2. Я импортировал все файлы, как это было предложено документами angular. Но получаю ошибку "Не удается найти имя Promise". Ниже мой код:

import { Injectable }    from '@angular/core';
import { Headers, Http, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class StorefrontService {
    private sfUrl = 'app/storefront/storefront.component.json';  // URL to mock json
    constructor(private http: Http) { }
    getSfItems(): Promise<any[]> {
        return this.http.get(this.sfUrl)
            .toPromise()
            .then(this.extractData)
            .catch(this.handleError);
    }
    private extractData(res: Response) {
        let body = res.json();
        return body.data || {};
    }
    private handleError(error: Response | any) {
        // In a real world app, we might use a remote logging infrastructure
        let errMsg: string;
        if (error instanceof Response) {
            const body = error.json() || '';
            const err = body.error || JSON.stringify(body);
            errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
        } else {
            errMsg = error.message ? error.message : error.toString();
        }
        console.error(errMsg);
        return Promise.reject(errMsg);
    }
}

Нужно ли откуда-то импортировать объект Promise? Я попытался импортировать из библиотеки rxjs, но это не сработало.

import { Promise } from 'rxjs/Promise';

Любая идея, почему это происходит?


person JS dev    schedule 01.12.2016    source источник
comment
Вы получаете ошибку в своем браузере или в вашем ide   -  person lastWhisper    schedule 01.12.2016
comment
Я получаю это в IDE (VS Code)   -  person JS dev    schedule 01.12.2016


Ответы (1)


Добавьте следующее в раздел импорта:

import { Observable } from 'rxjs/Rx'

this.http.get(...) вернет наблюдаемое, которое может вернуть обещание, добавив toPromise(), как вы сделали в своем коде. дальше вам не нужно ничего импортировать для обещания, так как это класс по умолчанию в ES6.

смотрите также:

надеюсь это поможет.

person hakany    schedule 01.12.2016
comment
Эй... Я пробовал, но в IDE все равно выдает ту же ошибку. Еще кое-что. В моем tsconfig.json у меня установлена ​​цель ES5.. - person JS dev; 01.12.2016
comment
Установите его на ES6 и игнорируйте ошибку, он будет нормально компилироваться. - person lastWhisper; 01.12.2016