Как я могу преобразовать массив обещаний в простой массив? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть этот сервис, который извлекает все из базы данных и этой модели:

export interface ServerPartner {
  uid: string;
  name: string;
  weight: number;
  logo?: string;
  active?: boolean;
}

export class Partner {
  uid: string;
  name: string;
  weight: number;
  logo?: string;
  active?: boolean;

  constructor(serverPartner: ServerPartner) {
    Object.assign(this, serverPartner);
  }
}


getAll$(): Observable<Partner[]> {
    return this.afs.collection<Partner>('partners')
    .valueChanges()
    .pipe(
      map((sPartners: ServerPartner[]) => sPartners
        .map(sPartner => new Partner(sPartner))
        .sort((a: Partner, b: Partner) => a.name > b.name ? 1 : -1)
      )
    );
  }

  getAll(): Promise<Partner[]> {
    return this.getAll$()
      .pipe(take(1))
      .toPromise();
  }

В моем компоненте я вызываю функцию getAll() следующим образом:

partners: Partner[];

ngOnInit() {
  this.partners = this.partnerService.getAll();
}

, но я получаюследующая ошибка:

Type 'Promise<Partner[]>' is missing the following properties from type 'Partner[]': length, pop, push, concat, and 26 more.ts(2740)

Как преобразовать массив обещаний в простой массив?

Ответы [ 2 ]

3 голосов
/ 14 октября 2019
async ngOnInit() {
  this.partners = await Promise.all(this.partnerService.getAll());
}
1 голос
/ 14 октября 2019

Просто используйте подписку после получения метода:

this.partnerService.getAll().subscribe(result => {
          this.partners = result ;
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...