代码之家  ›  专栏  ›  技术社区  ›  Anand

如何优雅地处理404中的角分量?

  •  0
  • Anand  · 技术社区  · 6 年前

    在这个特定的用例中,我们希望处理404,而不是将其传递给组件以在UI中显示文本消息。

    // code in service
    public getVariatioMarginPlugDates(): Observable<Date[]> {
    return this._http
                  .get<Date[]>(AppSettings.VariationMarginPlugDatesUrl, { withCredentials: true })
                  .pipe(catchError(this._trace.handleError('GET ' + AppSettings.VariationMarginPlugDatesUrl, [])));
    }
    

    404 也由 catchError 404

    非常感谢!

    // edited code with solution
    public getVariatioMarginEmail(runDate: string): Observable<any> {
    const url = AppSettings.VariationMarginEmailUrl.replace(this._regExp, runDate);
    return this._http
                  .get<any>(url, { withCredentials: true })
                  .catch(this._trace.handleError('GET ' + url, []));
    }
    
    public handleError<T>(operation = 'operation',  result?: T, skipStatus = [404]) {
        return (error: any): Observable<T> => {
    
          if (skipStatus.includes(error.status)) {
            return observableOf(error.status as T);
          }
    
          const errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error';
          console.error(errMsg);
    
          const dialog = this._dialogService.open({
            title: 'Server Error',
            content: `${operation} failed: ${errMsg}`,
            actions: [ { text: 'Ok' } ]
          });
    
          try { this._loggingService.log(errMsg); } catch (error) {}
    
          return observableOf(result as T); // return empty result
      };
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   bgraham    6 年前

    我认为您需要更改handle error方法,有两种选择:

    1) 别把它放在这里的管子里。然后您的组件将得到错误,您可以检查状态代码并处理需要如何处理

    2) 更改handle方法以检查状态,并重新抛出组件可以处理的404。如果还需要handleError方法中的其他日志记录等,可以这样做