gpt4 book ai didi

javascript - 拒绝 http.get catch block 中的 promise

转载 作者:行者123 更新时间:2023-12-01 04:06:48 25 4
gpt4 key购买 nike

我有一个异步函数,它在 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 block 中调用 this._handleError ,而是想拒绝我的 promise 并传递拒绝错误对象。我该怎么做?

尝试:

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<{}>'.

我正在使用 typescript

最佳答案

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

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()确实如此。

关于javascript - 拒绝 http.get catch block 中的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41749878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com