我在Observable
中包装了两个(多个)异步函数,希望将它们全部一起运行,并检查是否有错误或已完成。这是我的工作:
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语法,错误是最终的,因此通常假定操作员返回的流必须急于失败。
一种简单的解决方案是取消error
通知,而将其替换为在next
通知中插入的错误数据结构。
所以像:
observables.push(new Observable((observer:any) => {
async1(options, (error, info) => {
if (error) {
observer.next({error});
} else {
observer.next({info});
observer.complete();
}
});
}))
然后在您的
subscribe
中:Observable.forkJoin(observables).subscribe(
arrayData => arrayData.forEach(data => data.info? {
console.log(data.info);
} : {
console.log(data.error);
})
)