簡體   English   中英

在http.get catch塊中拒絕Promise

[英]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,不如拒絕我的諾言,並通過拒絕錯誤對象。 我怎么做?

嘗試:

private _getSchema(fileName): any {
    return new Promise((resolve, reject) => {
        this.http.get(fileName)
            .map(this._extractData)
            .catch(err => reject(err))
            .subscribe(schema => resolve(schema));
    });
};

給出錯誤:

類型'(err:any)=> void'的參數不能分配給類型'(err:any,catch:Observable)=> ObservableInput <{}>'的參數。 無法將類型“ void”分配給類型“ ObservableInput <{}>”。

我正在使用打字稿

承諾比http更好地適合可觀察的結果,因此我建議您采用承諾的方式:

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()所做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM