我有一个异步函数,它在承诺中使用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"的参数不能分配给参数 类型为'(err: any, caught: Observable) => ObservableInput<{}>'。 类型"void"不能分配给类型"ObservableInput<{}>"。
我正在使用打字稿
承诺比可观察结果更适合 http 结果,所以我建议你走承诺的方式:
private _getSchema(fileName): any {
return this.http.get(fileName).toPromise().then(x => this._extractData(x));
};
您尝试的方式不起作用,因为Observable.prototype.catch
具有不同的签名(它需要提供新的可观察量才能继续)。订阅onError是您要搜索的内容:
private _getSchema(fileName): any {
return new Promise((resolve, reject) => {
this.http.get(fileName)
.map(this._extractData)
.subscribe(resolve, reject);
});
};
但这正是observable.toPromise()
所做的。