Angular 6-嵌套Firebase请求

时间:2018-11-26 10:18:31

标签: angular firebase

我有以下代码:

班次取决于地点,地点取决于城市和 this.getCities()this.getEmployerLocations()this.getEmployerShifts()呼叫返回Observables

export class Employer {

cities      : string[];
locations   : Location[];
shifts      : Sift[];

constructor() {

    this.prepareShifts();

}

this.prepareShifts() {

}

this.getCities().subscribe( cities => {

    this.cities = cities;

    this.getEmployerLocations().subscribe( locations => {

        this.locations = locations;

        this.locations.forEach( location => {

            location.city = this.getCityById( location.cityId ); // from cities received: this.cities

        }); 

        this.getEmployerShifts().subscribe( shifts => {

            this.shifts = shifts;

            thi.shifts.forEach( shift => {

                this.shift.location = this.getShiftLocationById( shift.locationId );  // from locations received: this.locations

            });                 
        });                         
    );          
});
}   

如您所见,我需要按Firebase中的值填写城市,位置和班次。我做了嵌套调用以实现目标。

我想知道是否有适当的方法来完成它?我感觉自己做错了。

1 个答案:

答案 0 :(得分:1)

您可以使用class PersonValidator : AbstractValidator<Person> { PersonValidator() { RuleFor(c => c.Name).NotEmpty(); var addressValidator = new AddressValidator(); addressValidator.Validate( person.address ) // ??? } } 的{​​{1}}运算符。

对于嵌套异步操作非常有用。还有其他一些类似的运算符,flatMap是我通常使用的运算符。使用RxJs时,就像flatMap运算符一样,在其中返回标量对象。使用flatMap,您可以返回另一个可观察值。最后,您可以订阅最新的观察者。

这是您可以怎么做

map