拒绝http.get catch块中的promise

时间:2017-01-19 19:14:40

标签: javascript http typescript promise catch-block

我有这个在promise中使用http.get的异步函数。

private _getSchema(fileName): any {
    return new Promise((resolve, reject) => {
        this.http.get(fileName)
            .map(this._extractData)
            .catch(this._handleError)
            .subscribe(schema => resolve(schema));
    });
};

我不想在catch块中调用this._handleError,而是拒绝我的承诺并传递拒绝错误对象。我该怎么做?

尝试:

private _getSchema(fileName): any {
    return new Promise((resolve, reject) => {
        this.http.get(fileName)
            .map(this._extractData)
            .catch(err => reject(err))
            .subscribe(schema => resolve(schema));
    });
};

给出错误:

  

类型的参数'(错误:任何)=> void'不能赋值给参数   类型'(错误:任何,被捕获:可观察)=> ObservableInput< {}>”。   类型'void'不能分配给'ObservableInput< {}>'。

我正在使用打字稿

1 个答案:

答案 0 :(得分:2)

作为http结果的承诺比observable更好,所以我建议你采取承诺方式:

private _getSchema(fileName): any {
    return this.http.get(fileName).toPromise().then(x => this._extractData(x));
};

您尝试的方式不起作用,因为Observable.prototype.catch具有不同的签名(它需要提供一个新的observable来继续)。订阅onError是您要搜索的内容:

private _getSchema(fileName): any {
    return new Promise((resolve, reject) => {
        this.http.get(fileName)
            .map(this._extractData)
            .subscribe(resolve, reject);
    });
};

但这正是observable.toPromise()的作用。