Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rxjs:“throw”语句未被管道捕获错误处理_Rxjs_Ngrx_Ngrx Effects - Fatal编程技术网

Rxjs:“throw”语句未被管道捕获错误处理

Rxjs:“throw”语句未被管道捕获错误处理,rxjs,ngrx,ngrx-effects,Rxjs,Ngrx,Ngrx Effects,authenticationService提供以下身份验证方法。我无法输入管道捕捉错误。我错过了什么 authenticate(credentials: { username: string; password: string }){ return new Observable<any>((observer: Observer<any>) => { // ... calling the service, obtaining a promise

authenticationService提供以下身份验证方法。我无法输入管道捕捉错误。我错过了什么

authenticate(credentials: { username: string; password: string }){

   return new Observable<any>((observer: Observer<any>) => {

    // ... calling the service, obtaining a promise
    const authenticationPromise = ... ;

    // This is a promise, it must be converted to an Observable
    authenticationPromise
        .then(() => {
          observer.next('ok');
          observer.complete();
        })
        .catch(err => {
          console.log('service error ' + err);
          throw new Error('crap');
        });
    });
  }
如上所述,catchError用于:

以可观察的顺序优雅地处理错误

首先,你基本上是通过抓住承诺中的错误来处理承诺中的错误。在承诺中抛出错误不会返回发出错误的可观察对象

你可以:

将你的承诺转化为可观察的,不要使用。抓住。 使用rxjs的“ThrowerError”将错误作为可观察值返回 无论哪种方式,创建可观察对象的方式都值得怀疑

这是处理rxjs中承诺的一种更好、更简洁的方法:

from(authenticationPromise)
    .pipe(
         map(() => 'ok')
    )

您没有在身份验证方法中返回可观察的。试着从你的承诺中得到回报。最后,我的错误是,可观察到的事实上得到了回报。我修正了我的问题。感谢您指出,您不需要创建这样的可观察对象,只需使用return from_promise_here from是一种rxjs创建方法,而不是抛出,调用observer.error,传递您想要报告的错误。感谢您提供的信息。这里的接线员绝对是守门员!而观察家。错误把它钉住了。再次感谢!的确,谢谢。此外,在我的例子中,问题的根本原因与使用throw而不是observer.error并向其传递一个error子类有关。
from(authenticationPromise)
    .pipe(
         map(() => 'ok')
    )