找不到名字Promise

时间:2016-12-01 14:10:59

标签: angular rxjs angular-promise angular2-services angular2-observables

我在angular2中使用Promise时遇到问题。我按照angular docs的建议导入了所有文件。但得到错误“找不到名字承诺”。以下是我的代码:

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';

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

将以下内容添加到导入部分:

import { Observable } from 'rxjs/Rx'

this.http.get(...)将返回一个observable,它可以通过在代码中添加toPromise()来返回一个承诺。此外,你还没有为了承诺导入任何其他东西,因为它是ES6中的默认类。

另见:

希望这会有所帮助。