我有这个在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< {}>'。
我正在使用打字稿
答案 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()
的作用。