fromPromise中的RXJS抛出错误未命中';捕捉错误';管道法

fromPromise中的RXJS抛出错误未命中';捕捉错误';管道法,rxjs,observable,Rxjs,Observable,有人能解释为什么这个promise(runQuery)在“catch”中失败并抛出一个ErrorObservable,但在“catchError”方法中没有被捕获,而是在“map”方法中被捕获。 (我尝试了两种方法,相同的结果) 从'rxjs/observable/throw'导入{u throw}; 从“rxjs/observable/ErrorObservable”导入{ErrorObservable}; const runQuery=(拒绝的承诺) const source$=fromPr

有人能解释为什么这个promise(runQuery)在“catch”中失败并抛出一个ErrorObservable,但在“catchError”方法中没有被捕获,而是在“map”方法中被捕获。
(我尝试了两种方法,相同的结果)

从'rxjs/observable/throw'导入{u throw};
从“rxjs/observable/ErrorObservable”导入{ErrorObservable};
const runQuery=(拒绝的承诺)
const source$=fromPromise(
运行查询({d:'g'})
.catch(错误=>{
返回新的ErrorObservable(err);
//return _-throw(err);--同上
})
)
.烟斗(
map((响应:任意)=>{
//在此处输入response.error
}),
捕捉错误(e=>{
//不进
})
);

您正在处理承诺中自己的错误,并让它返回一个可观察的
错误。通过这样做,您使承诺成功(尽管有返回值之类的错误)
fromPromise
会将其转换为发射,而不是错误

删除fromPromise中的catch case,它应该命中可观察的。catchError

没有必要处理承诺(当它仍然是一个承诺时),因此这远不是推荐的

.then(data => {
  return data;
})
.catch(err => {
  return new ErrorObservable(err);
  //return _throw(err); -- same as above
}))
让观察者控制拒绝

const source$ = fromPromise(runQuery())        
    .pipe(
        map((response: any) => {
            //Make here some transformations
            return response;     
        }),
        catchError(e => {
            return _throw(e);
        }
    ));

如果要在observable接收到错误之前更改错误对象或在promise中的catch中执行console.log(),可以抛出错误:

.then(data => {
  return data;
})
.catch(err => {
  console.error("Error", err );
  err.code = 110; // you may want to change something before passing to observable
  throw err;
}))

如果使用return error,则observable的错误或捕获管道将不起作用,但使用throw它会起作用。

map
没有任何错误处理程序。它仅适用于
next
通知。看起来你的括号错了。马丁,谢谢你,你是对的,修正了括号,按照马克下面说的做了,解决了这个问题。非常感谢,谢谢!成功了。就像马丁上面说的,我也有一个帕伦斯,这是什么搞砸了管道法。谢谢你们俩!!