【发布时间】:2017-07-30 19:38:01
【问题描述】:
我正在尝试通过 observable 流式传输一组内容,并且它在第一个错误后停止。将其视为一个项目数组是很简单的,因为它的行为方式相同。
- 我正在从一组项目创建一个可观察对象
- 将每个项目映射到一个 URL
- 将 URL 作为请求承诺调用
- 执行 catch(),在发生错误时返回 observable.empty()
使用 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 中的空 observable 正在终止 observable,但我不确定为什么。
我想要的过程是处理数组中的所有项目而不管错误 - 最终处理所有成功的项目并在每个错误后恢复。
【问题讨论】:
-
这种行为是有道理的。如果发生错误,原始的 observable 完成并被一个空的 observable 替换。我想你在找
onErrorResumeNext()。例如,与flatMap结合使用 -
我尝试了这个想法,将 .from(Array) 行包装为:rx.Observable.onErrorResumeNext(rx.Observable.from(array)),但什么也没做。我不确定如何将它从 flatMap 包装到请求中?还是我错过了介于两者之间的东西?
-
对不起-pebkac。将可观察的 inside 包裹起来就是你所说的。谢谢。看来我还不能回复修复。