Angular объединить 2 обещания в 1 обещание - PullRequest
2 голосов
/ 10 июля 2020

В моем приложении я пытаюсь реализовать метод loadAll.

Что нужно сделать, это вызвать 2 метода http для загрузки данных.

Эти 2 метода возвращают обещания.

Когда я пытаюсь объединить их в одно обещание, я получаю сообщение об ошибке.

  loadAll() {
    return new Promise((resolve, reject) => {
      resolve(
        this.getAllItem1ToConnect(),
          this.getAllItem2ToConnect();
      );
    }
    );
  }

Я понимаю, что это неправильно, как мне это реализовать?

getAllItem1ToConnect метод:

  getAllItem1ToConnect() {
    return this.http.get<Item1[]>(this.path + '/item').toPromise().then((res: Item1[]) => {
      this.items1 = res;
    });
  }

Как объединить getAllItem1ToConnect и getAllItem2ToConnect в одно обещание?

1 Ответ

4 голосов
/ 10 июля 2020

Вы можете использовать Promise.all. Это принимает массив Promises и возвращает единственный Promise.

function func1() {
  return new Promise( (res, rej) => {
    setTimeout(() => res('from func1'), 1000);
  });
}

function func2() {
  return new Promise( (res, rej) => {
    setTimeout(() => res('from func2'), 1000);
  });
}

Promise.all([func1(), func2()]).then( res => console.log(res));

Итак, в вашем случае вы хотите:

const promise = Promise.all([
  this.getAllItem1ToConnect(),
  this.getAllItem2ToConnect()
]);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

...