我正在尝试通过observable传输一组内容,并在第一次错误后停止。将其视为一个项目数组是简单的,因为它的行为方式相同。
使用RxJS 5:
rx.Observable.from(array)
.map(self.createUrl)
.flatMap(x => {
var options = {
uri: url,
headers: {
"Content-Type": "application/json"
};
return rx.Observable.fromPromise(request-promise(options));
})
.catch(() => {
return rx.Observable.empty();})
.subscribe( x => console.log('success:', x),
e => console.log('error'),
() => console.log('complete'));
执行此序列时,代码在遇到第一个错误后停止。我怀疑#4中的空观察是终止了观察,但我不确定为什么。
我希望的过程是处理数组中的所有项目而不管错误 - 最终处理所有成功的项目并在每次错误后恢复。
答案 0 :(得分:3)
您只需将catch()
放在flatMap
:
rx.Observable.from(array)
.map(self.createUrl)
.flatMap(x => {
var options = {
uri: url,
headers: {
"Content-Type": "application/json"
}
};
return rx.Observable
.fromPromise(request-promise(options))
.catch(() => rx.Observable.empty());
})
.subscribe( x => console.log('success:', x),
e => console.log('error'),
() => console.log('complete'));
现在,当内部Observable发出错误时,它会立即被捕获,并且不会通过.flatMap()
传播到主流。