0

我有这个异步函数,它在承诺中使用 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));
    });
};

给出错误:

'(err: any) => void' 类型的参数不能分配给'(err: any, catched: Observable) => ObservableInput<{}>' 类型的参数。类型 'void' 不可分配给类型 'ObservableInput<{}>'。

我正在使用打字稿

4

1 回答 1

2

Promise 比 observables 更适合作为 http 结果,所以我建议你采用 Promise 的方式:

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()做的。

于 2017-01-19T19:20:26.277 回答