Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RXjs-即使在出错后仍继续侦听_Javascript_Rxjs_Observable - Fatal编程技术网

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}