免责声明:这是上一篇的延续2 个相关流的安全更新问题
是什么惯用语处理 RxJS(或任何其他 RX 实现)中允许流不终止的错误的方法?
相关代码是
function convert(unit, value) {
var request = {};
request[unit] = value;
var conversion = $.ajax({
method: 'POST',
url: './convert.php',
data: request,
dataType: 'json'
}).promise();
return Rx.Observable.fromPromise(conversion).takeUntil(inInput.merge(cmInput));
}
var cmElement = document.getElementById('cm'),
inElement = document.getElementById('in');
var cmInput = Rx.Observable.fromEvent(cmElement, 'input').map(targetValue),
inInput = Rx.Observable.fromEvent(inElement, 'input').map(targetValue);
var inches = cmInput
.flatMap(convert.bind(null, 'cm'))
.startWith(0);
var centimeters = inInput
.flatMap(convert.bind(null, 'in'))
.startWith(0);
正如您所看到的,我们使用输入字段更改的流并将其传递给convert
将其转换为另一个单位并将结果进一步传递的函数。
如果期间出现错误$.ajax()
调用发生然后它向上传播并且整个inches
or cetimeters
流停止(实际上是预期的)。
但我该如何实施才能不这样做呢?
这样我就可以优雅地处理错误,例如显示错误消息并在新数据到达时重试?
我目前的想法是引入像 Haskell 那样的复合类型Data.Either
并流式传输它而不是标量双精度数。
想法?
UPD: 是的,我读过在不停止序列的情况下处理反应式扩展中的异常但我还是希望有更好的方法。