拒绝 http.get catch 块中的承诺
Reject a promise within an http.get 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,我想拒绝我的承诺并传递 reject 错误对象。我该怎么做?
尝试:
private _getSchema(fileName): any {
return new Promise((resolve, reject) => {
this.http.get(fileName)
.map(this._extractData)
.catch(err => reject(err))
.subscribe(schema => resolve(schema));
});
};
给出错误:
Argument of type '(err: any) => void' is not assignable to parameter
of type '(err: any, caught: Observable) => ObservableInput<{}>'.
Type 'void' is not assignable to type 'ObservableInput<{}>'.
我正在使用打字稿
Promise 作为 http 结果比 observable 更适合,所以我建议你采用 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()
所做的。
我有一个在 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,我想拒绝我的承诺并传递 reject 错误对象。我该怎么做?
尝试:
private _getSchema(fileName): any {
return new Promise((resolve, reject) => {
this.http.get(fileName)
.map(this._extractData)
.catch(err => reject(err))
.subscribe(schema => resolve(schema));
});
};
给出错误:
Argument of type '(err: any) => void' is not assignable to parameter of type '(err: any, caught: Observable) => ObservableInput<{}>'. Type 'void' is not assignable to type 'ObservableInput<{}>'.
我正在使用打字稿
Promise 作为 http 结果比 observable 更适合,所以我建议你采用 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()
所做的。