@sdgroup14

Как функцию заставить ждать выполнение другой функции Angular 2+?

Вообщем я так понимаю я вообще не могу понять как работают промисы... и как мне поступить в моей ситуации. Сейчас оно работает но некорректно... Я бы хотел убрать setTimeout в функции и сделать ее адекватно. Помогите пож-ста с этим разобраться. Суть вопроса. Как заставить функцию mapReady ждать выполнение buildMarkers

buildMarkers(cars): void {
    for (let i in cars) {
      let lat: number = cars[i].coordinates.lat;
      let lon: number = cars[i].coordinates.lon;
      let pin = cars[i].pin;
      let singleMarker = new Marker([lat, lon], {
        icon: new DivIcon({
          className: 'my-div-icon',
          html: this.getHtmlMarker(cars, pin)
        })
      });
      this.layers.push(singleMarker);
    };
  };

  public mapReady(map) {
    this.map = map;
    let that = this;
    setTimeout(() => {
      that.buildMarkers(this.cars);
    }, 500);
  };
  • Вопрос задан
  • 1255 просмотров
Решения вопроса 1
mazhekin
@mazhekin
Frontend, Backend Web Developer
промисы использовать во втором ангуляре это треш, надо переучиватся на стиль второго ангуляра, сами разработчики ангуляра 2+ уже включили rxjs во фреймворк и отказались от промисов.
buildMarkers(cars): void {
  return Observable.create(observer => {
    for (let i in cars) {
      let lat: number = cars[i].coordinates.lat;
      let lon: number = cars[i].coordinates.lon;
      let pin = cars[i].pin;
      let singleMarker = new Marker([lat, lon], {
        icon: new DivIcon({
          className: 'my-div-icon',
          html: this.getHtmlMarker(cars, pin)
        })
      });
      this.layers.push(singleMarker);
    };
    
    observer.next();
    observer.complete()
  });
};

public mapReady(map) {
    this.map = map;
    let that = this;

    that.buildMarkers(this.cars).subscribe(() => {
      // тут выполните код, который гарантированно выполнится после buildMarkers
    });
   
  };
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы