如何使用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)返回可观察