RxJs 似乎没有变体catch()
方法只允许捕获特定类型的异常。但很多时候我发现自己处于需要这样的操作员的情况。
例如,成像我需要解析日志文件的每一行并打印解析的消息。日志文件的某些行可能已损坏,但我真的不在乎,只想为此类行输出“日志消息已损坏”并继续下一行。
If catch()
确实允许我们指定特定类型的错误来捕获并传递所有其他错误,然后我们可以执行如下伪代码之类的操作
readLogs()
.flatMap parseLog
.catchOnly ParseError, () ->
'Log message corrupted'
.subscribe (logMessage) ->
console.log logMessage
我想知道考虑到当前的限制,RxJs 执行此操作的正确方法是什么catach()
.
你需要筑巢catch
为了防止错误终止整个链,您需要将逻辑分开分裂 and parsing lines:
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);
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)