作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
RxJs 似乎没有 catch()
的变体只允许捕获特定类型异常的方法。但是很多时候我发现自己处于需要这样的运算符(operator)的境地。
例如,成像我需要解析日志文件的每一行并打印解析的消息。日志文件的某些行可能已损坏,但我真的不在乎,只想为该行输出“日志消息已损坏”并继续到下一行。
如 catch()
确实允许我们指定特定类型的错误来捕获并传递所有其他错误,然后我们可以做一些类似下面的伪代码的事情
readLogs()
.flatMap parseLog
.catchOnly ParseError, () ->
'Log message corrupted'
.subscribe (logMessage) ->
console.log logMessage
catach()
的当前限制,RxJs 的正确方法是什么? .
最佳答案
您需要嵌套 catch
为了防止错误终止整个链,您需要分离拆分和解析行的逻辑:
import {of, throwError} from 'rxjs'
import {flatMap, map, catchError} from 'rxjs/operators'
function handleErrors(e) {
return (e instanceof ParseError) ?
of("Log message corrupted") : throwError(e);
}
readLogs().pipe(
flatMap(splitLines)
flatMap(line =>
of(line).pipe(
map(parseLine),
catch(handleErrors)
)
)
)
.subscribe(
parsedLine => console.log(parsedLine),
e => console.error('Fatal error: ' + e);
);
关于typescript - 如何在不中止序列的情况下仅捕获特定类型的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30795735/
我是一名优秀的程序员,十分优秀!