拒绝 http.get catch 块中的承诺



我有一个异步函数,它在承诺中使用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()所做的。

最新更新