Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
如何使用Rxjs在Angular中调用多个异步方法的数组?_Angular_Typescript_Asynchronous_Rxjs - Fatal编程技术网

如何使用Rxjs在Angular中调用多个异步方法的数组?

如何使用Rxjs在Angular中调用多个异步方法的数组?,angular,typescript,asynchronous,rxjs,Angular,Typescript,Asynchronous,Rxjs,我有Base Validator方法,它有ivalidator列表 import { IValidator, ValidatorModel } from "../validation/ivalidator"; import { Observable } from "rxjs/Observable"; export abstract class BaseValidator implements IValidator { private validators = new Array<

我有
Base Validator
方法,它有
ivalidator
列表

import { IValidator, ValidatorModel } from "../validation/ivalidator";
import { Observable } from "rxjs/Observable";

export abstract class BaseValidator implements IValidator {

    private validators = new Array<IValidator>();

    //Validators are pushed to the base validator =>Not implemented yet

    validate(): Observable<ValidatorModel> {

        for (let i = 0; i < this.validators.length; i++) {
            //How do I loop thru all the validator and call its ASYNC method 
            //one by one and break and return when there is an error ???
        }

    }
}
验证模型是

export class ValidatorModel {
    readonly isSuccessful: boolean;
    errors: Array<string>;
}
导出类验证模型{
只读isSuccessful:布尔值;
错误:数组;
}
我的问题是:

如何循环通过所有验证器并调用其异步方法
一个接一个地中断并返回时出现错误

如果希望逐个执行验证,请使用运算符:

validate(): Observable<ValidatorModel> {
    let obs = this.validators.map(validator=>validator.validate());
    return Observable.merge(obs);
}
validate(): Observable<ValidatorModel> {
    let obs = this.validators.map(validator=>validator.validate());
    return Observable.forkJoin(obs);
}
return Observable.forkJoin(obs)
    .catch(error=>{
        console.log('error encountered',error);
        //handle your errors here
        //Return an empty Observable to terminate the stream
        return Observable.empty();
    });
至于错误处理,无论是
merge
还是
forkJoin
都会在遇到错误时抛出错误,您可以在
subscribe()
处理程序中处理它。如果要对
可观察对象执行(管道)更多操作,则错误将被抛出到最终堆栈:

someValidator.subscribe(
            (results) => {
            },
            (error) => {
                //handle error here
            },
            () => {
                //observable completed
            })
如果选择显式处理基类中的错误,则使用
catch
运算符:

validate(): Observable<ValidatorModel> {
    let obs = this.validators.map(validator=>validator.validate());
    return Observable.merge(obs);
}
validate(): Observable<ValidatorModel> {
    let obs = this.validators.map(validator=>validator.validate());
    return Observable.forkJoin(obs);
}
return Observable.forkJoin(obs)
    .catch(error=>{
        console.log('error encountered',error);
        //handle your errors here
        //Return an empty Observable to terminate the stream
        return Observable.empty();
    });

那么,当我发现其中一个验证器已经“出错”时,我该如何“中断”呢?我的意思是我想根据isSuccessful标志而不是“抛出”异常来处理错误。还有编译时错误可观察。合并(obs)返回可观察