使用异步/等待时,错误处理程序返回默认值

Angular tutorial中有一个建议的错误处理程序,如果发生错误,该错误处理程序可以将默认值返回给调用方。

/**
 * Handle Http operation that failed.
 * Let the app continue.
 * @param operation - name of the operation that failed
 * @param result - optional value to return as the observable result
 */
private handleError<T> (operation = 'operation',result?: T) {
  return (error: any): Observable<T> => {

    // TODO: send the error to remote logging infrastructure
    console.error(error); // log to console instead

    // TODO: better job of transforming error for user consumption
    this.log(`${operation} failed: ${error.message}`);

    // Let the app keep running by returning an empty result.
    return of(result as T);
  };
}

现在我使用async / await进行了网络服务调用:

public async getItemsAsync() {
    try {
      return await this.http.get<string[]>("/some/url").toPromise();
    }
    catch (error) {
      this.handleError<string[]>('getItemsAsync',[]);
    }
}

为了能够从我的错误处理程序中返回默认值,我必须更改什么?

private handleError<T>(operation = 'operation',result?: T) {  
    console.log(`${operation} failed: ${error.message}`);

    // let the app keep running by returning an empty result.
    return result as T;
}

我应该返回Observable还是Promise?我都尝试过,但是没有编译。当前,string[]未返回。我只会得到undefined

servicesp417 回答:使用异步/等待时,错误处理程序返回默认值

考虑在可观察的水平上处理错误:

async getItemsAsync() {
    return await this.http
      .get<string[]>("/some/url")
      .pipe(catchError(this.handleError<string[]>("getItemsAsync",[])))
      .toPromise();
}

您可以使用RxJS中的catchError运算符。这将运行您的错误日志记录,并向handleError函数返回您指定的值的可观察值。然后,您的toPromise运算符会将可观察到的错误或api响应中的值转换为Promise。

Stackblitz demo

本文链接:https://www.f2er.com/3167736.html

大家都在问