Angular 从后端获取一些数据后的 EventEmitter

Angular EventEmitter after getting some data from back-end

我有下一个代码:

streets: Street[] = [];
@Output() sendStreets =  new EventEmitter<Street[]>();

triggerLoading(trig: string){
    switch(trig) {
      case 'street': {
        this.loadStreets(this.district);

        //sending data
        this.sendStreets.emit(this.streets);

        this.street = this.building = this.apartment = undefined;
        this.buildings = this.apartments = this.subscribers = [];
        break;
      }
}

所以问题是 this.loadStreets(this.district); 方法从后端街道数组请求,当我发送数据时 this.sendStreets.emit(this.streets); 我在第一个请求中进入父组件空数组,然后在第二个我得到了我应该在第一个请求中得到的数据等等。 所以,例如我应该得到:

1 request: "[Str1, St2, St2]", 2request: ["Str10, Str20, Str30"], 3request: [Str20, Str30, Str40] etc.

但我得到:`

1request: "[]", 2 request: "[Str1, St2, St2]", 3request: ["Str10, Str20, Str30"] etc.

`

我怎样才能异步发出它,我的意思是在 loadStreet 完成执行后我会发出数据?

更新: 我如何接收数据:

<hs-filter> (sendStreets)= "getStreets($event)" </hs-filter >

getStreets(streets: Street[]){
    console.log(streets);
    this.streets = streets;
    this.buildings = this.apartments = [];

    this.streets.forEach(street => {
      this.addresses.push(
        new AddressItem(street.id, 'street', street.title));
    });
  }

我已经解决了这个问题,但我不喜欢我的解决方案。 如果有人有另一个,请回答

我刚刚将 sendStreets 移到了 loadStreets 中。所以我得到下一个代码:

private loadStreets(district: District){
    this.addressService.getStreets(district)
      .subscribe(streets => {
        this.streets = streets;
        this.sendStreets.emit(streets);
      });
  }

这里一切正常,因为我在从后端获取街道后发送街道。

class EventEmitter 扩展主题 { 构造函数(isAsync:boolean = false)- 所以对于你的情况: @Output() sendStreets = new EventEmitter(true);