[英]How to call array of multiple async methods in Angular using Rxjs?
我有具有ivalidator
列表的Base Validator
方法。
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 ???
}
}
}
每個validator
方法都公開validate()
方法,該方法返回一個可觀察值。
export interface IValidator {
validate(): Observable<ValidatorModel>;
}
ValidatorModel是
export class ValidatorModel {
readonly isSuccessful: boolean;
errors: Array<string>;
}
我的問題是:
我如何遍歷所有驗證器並一個接一個地調用其ASYNC方法,並在出現錯誤時中斷並返回?
如果要一次一次執行驗證,請使用merge
運算符:
validate(): Observable<ValidatorModel> {
let obs = this.validators.map(validator=>validator.validate());
return Observable.merge(obs);
}
如果希望同時並行執行驗證,請使用forkJoin
運算符:
validate(): Observable<ValidatorModel> {
let obs = this.validators.map(validator=>validator.validate());
return Observable.forkJoin(obs);
}
至於錯誤處理, merge
和forkJoin
都會在遇到錯誤時拋出錯誤,您可以在您的forkJoin
subscribe()
處理程序中進行處理。 如果您要對Observable<ValidatorModel>
做更多的操作,那么錯誤將被拋出最終的堆棧:
someValidator.subscribe(
(results) => {
},
(error) => {
//handle error here
},
() => {
//observable completed
})
如果選擇顯式處理基類中的錯誤,請使用catch
運算符:
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();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.