有人可以解释为什么这个未能进入'catch'并抛出ErrorObservable的promise(runQuery)不会被'catchError'方法捕获,而是进入'map'方法。
(我尝试了两种_throw / ErrorObservable方法,结果相同)
import { _throw } from 'rxjs/observable/throw';
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
const runQuery = ( Promise that rejects )
const source$ = fromPromise(
runQuery({ d: 'g' })
.catch(err => {
return new ErrorObservable(err);
//return _throw(err); -- same as above
})
)
.pipe(
map((response: any) => {
//ENTERS HERE as response.error
}),
catchError(e => {
//DOES NOT ENTER
})
);
答案 0 :(得分:1)
您正在承诺中处理自己的错误,并让它返回fromPromise
。通过这样做,你使承诺成功(尽管有一个像返回值这样的错误)。 {{1}}会将此转换为排放而非错误。
删除fromPromise中的catch案例,它应该点击Observable.catchError
答案 1 :(得分:0)
I made a live example to prove my point. 没有必要处理这个承诺(当它仍然是一个承诺时),所以这远非值得推荐。
.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);
}
));