如何使用捕获错误处理角度错误

Posted

技术标签:

【中文标题】如何使用捕获错误处理角度错误【英文标题】:How to handle the error in angular with catch error 【发布时间】:2019-06-30 04:03:29 【问题描述】:

我正在使用 Angular 7。这是我的服务。

get()
return this.http.post(this.url).pipe(
catchError(this.handleError)
)

这是错误处理程序代码。

handleError(errorResponse: HttpErrorResponse) 
    if (errorResponse.error instanceof ErrorEvent) 
      return throwError(errorResponse.error.message)
     else 
      switch (errorResponse.status) 
        case 400:
          return throwError(errorResponse.error.message)
        case 401:
          return throwError(errorResponse.error.message)
        case 409:
          return throwError(errorResponse.error.message)
        case 500:
          return throwError(errorResponse.error.message)
      
    
  

这是我在按下提交按钮时收到的错误。

core.js:15714 ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
    at subscribeTo (subscribeTo.js:41)
    at subscribeToResult (subscribeToResult.js:11)
    at CatchSubscriber.push../node_modules/rxjs/_esm5/internal/operators/catchError.js.CatchSubscriber.error (catchError.js:43)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59)
    at FilterSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79)
    at FilterSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/OuterSubscriber.js.OuterSubscriber.notifyError (OuterSubscriber.js:13)
    at InnerSubscriber.push../node_modules/rxjs/_esm5/internal/InnerSubscriber.js.InnerSubscriber._error (InnerSubscriber.js:18)
    at InnerSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59)

请在这种情况下帮助我。

【问题讨论】:

您可能不会从catchError 的回调中返回任何内容。 使用try catch。将您的代码放入 try 并在控制台中捕获错误。 TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable的可能重复 什么是导致问题的 HTTP 请求的响应?您可能需要为您的开关添加默认情况 【参考方案1】:

这是一个错误,表明您未能在 observable 中提供流。

这通常发生在您没有向 switchMapcombineLatest 或在本例中为 catchError 等运算符提供可观察对象时。

只需添加一个

return of(undefined); 

在您的catchError 中解决问题。

【讨论】:

【参考方案2】:

你从你的 catchError 操作符返回 undefined。 catchError 操作符希望你返回一个 observable。

get()
    return this.http.post(this.url).pipe(
        catchError((err) => 
            // handle the error

            // use the empty() factory method to return an observable
            // that emits nothing and completes
            return empty();
        )
    )

参考:empty

【讨论】:

以上是关于如何使用捕获错误处理角度错误的主要内容,如果未能解决你的问题,请参考以下文章

当我创建一个函数来处理我的 xhrhttp 请求时,如何解决未捕获的类型错误?

JavaScript中错误处理

JavaScript中错误处理

如何正确捕获和处理对 Facebook api 的 Http 获取请求中的错误

如何在 Perl 子例程中处理已捕获和未捕获的错误?

如何修复此功能以处理不同类型的错误捕获