Javascript RXjs-即使在出错后仍继续侦听
我有两个(多个)异步函数包装在一个Javascript RXjs-即使在出错后仍继续侦听,javascript,rxjs,observable,Javascript,Rxjs,Observable,我有两个(多个)异步函数包装在一个可观察的中,并希望将它们一起运行,并在出现错误或完成时进行检查。以下是我的工作: var observables = []; observables.push(new Observable((observer:any) => { async1(options, (error, info) => { if (error) { observer.error(error); } else {
可观察的中,并希望将它们一起运行,并在出现错误或完成时进行检查。以下是我的工作:
var observables = [];
observables.push(new Observable((observer:any) => {
async1(options, (error, info) => {
if (error) {
observer.error(error);
} else {
observer.next(info);
observer.complete();
}
});
}))
observables.push(new Observable((observer:any) => {
async2(options, (error, info) => {
if (error) {
observer.error(error);
} else {
observer.next(info);
observer.complete();
}
});
}))
Observable.forkJoin(observables).subscribe(
data => {
console.log(data);
},
error => {
console.log(error);
}
)
现在这是我的问题。。。当两个异步函数都成功完成时,它调用data=>{}
,并在数组中返回这两个结果
如果两个函数中的一个失败,它将调用一次error=>{}
,就是这样。我想听听每个错误,我该怎么做?组合多个流的操作员的默认行为是,一旦其中一个流发出错误通知,就退出。这是因为,根据Rx语法,错误是最终的,因此通常假定操作员返回的流必须立即失败
这里一个简单的解决方案是取消错误
通知,并将其替换为插入下一个
通知的错误数据结构
比如:
observables.push(new Observable((observer:any) => {
async1(options, (error, info) => {
if (error) {
observer.next({error});
} else {
observer.next({info});
observer.complete();
}
});
}))
然后在您的订阅中
:
Observable.forkJoin(observables).subscribe(
arrayData => arrayData.forEach(data => data.info? {
console.log(data.info);
} : {
console.log(data.error);
})
)
一种方法不是抛出错误,而是传递错误代码,即la node.js{result,err}