LINUX.ORG.RU

История изменений

Исправление Princesska, (текущая версия) :

А в общем случае? Некая асинхронная функция что-то выдает. Надо собрать и неоднократно использовать.

Результаты вызовов нескольких асинхронных функций (если ты используешь оператор async, то при вызове будет возвращаться тип Promise), например, таких:

const yieldNumber = () => new Promise((res, rej) => {
  setTimeout(() => {
    res(Math.random())
  }, 100)
});

можно легко собрать с помощью Promise.all в один массив:

Promise.all([
  yieldNumber(),
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(numbers => {
  // здесь делаем что-нибудь с нашими числами
})

Например:

let numbers = []; // создадим хранилище

Promise.all([
  yieldNumber(), // эту функцию мы обьявили ранее
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(yoldNumbers => {
  numbers = yoldNumbers;
  
  return numbers
}).then(console.log) // только в этом then наш код будет знать, что numbers изменён!

Выведет в консоль:

[
  0.6974620730153078,
  0.876047460204964,
  0.014076783113265878,
  0.8746765911066423
]

Хранилище для полученных асинхронно данных лучше, конечно, делать не в виде переменной, а сразу классом:

class NumberStorage {
  numbers = []
}

const randomNumberStorage = new NumberStorage();

Promise.all([
  yieldNumber(),
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(yoldNumbers => {
  randomNumberStorage.numbers = yoldNumbers
}).then(() => {
  console.log(randomNumberStorage.numbers) // результат, аналогичный предыдущему примеру
})

Чтобы не запутаться, можешь пользоваться деструктуризацией:

Promise.all([
  yieldNumber(), // эту функцию мы обьявили ранее
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(([
  fst,
  snd,
  thrd,
  lst
]) => console.table({
  fst,
  snd,
  thrd,
  lst
}))

Исправление Princesska, :

А в общем случае? Некая асинхронная функция что-то выдает. Надо собрать и неоднократно использовать.

Результаты вызовов нескольких асинхронных функций (если ты используешь оператор async, то при вызове будет возвращаться тип Promise), например, таких:

const yieldNumber = () => new Promise((res, rej) => {
  setTimeout(() => {
    res(Math.random())
  }, 100)
});

можно легко собрать с помощью Promise.all в один массив:

Promise.all([
  yieldNumber(),
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(numbers => {
  // здесь делаем что-нибудь с нашими числами
})

Например:

let numbers = []; // создадим хранилище

Promise.all([
  yieldNumber(), // эту функцию мы обьявили ранее
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(yoldNumbers => {
  numbers = yoldNumbers;
  
  return numbers
}).then(console.log) // только в этом then наш код будет знать, что numbers изменён!

Выведет в консоль:

[
  0.6974620730153078,
  0.876047460204964,
  0.014076783113265878,
  0.8746765911066423
]

Хранилище для полученных асинхронно данных лучше, конечно, делать не в виде переменной, а сразу классом:

class NumberStorage {
  numbers = []
}

const randomNumberStorage = new NumberStorage();

Promise.all([
  yieldNumber(),
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(yoldNumbers => {
  randomNumberStorage.numbers = yoldNumbers
}).then(() => {
  console.log(randomNumberStorage.numbers) // результат, аналогичный предыдущему примеру
})

Чтобы не запутаться, можешь пользоваться деструктуризацией

Promise.all([
  yieldNumber(), // эту функцию мы обьявили ранее
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(([
  fst,
  snd,
  thrd,
  lst
]) => console.table({
  fst,
  snd,
  thrd,
  lst
}))
```js

Исходная версия Princesska, :

общий ответ на общий вопрос

А в общем случае? Некая асинхронная функция что-то выдает. Надо собрать и неоднократно использовать.

Результаты вызовов нескольких асинхронных функций (если ты используешь оператор async, то при вызове будет возвращаться тип Promise), например, таких:

const yieldNumber = () => new Promise((res, rej) => {
  setTimeout(() => {
    res(Math.random())
  }, 100)
});

можно легко собрать с помощью Promise.all в один массив:

Promise.all([
  yieldNumber(),
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(numbers => {
  // здесь делаем что-нибудь с нашими числами
})

Например:

let numbers = []; // создадим хранилище

Promise.all([
  yieldNumber(), // эту функцию мы обьявили ранее
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(yoldNumbers => {
  numbers = yoldNumbers;
  
  return numbers
}).then(console.log) // только в этом then наш код будет знать, что numbers изменён!

Выведет в консоль:

[
  0.6974620730153078,
  0.876047460204964,
  0.014076783113265878,
  0.8746765911066423
]

Хранилище для полученных асинхронно данных лучше, конечно, делать не в виде переменной, а сразу классом:

class NumberStorage {
  numbers = []
}

const randomNumberStorage = new NumberStorage();

Promise.all([
  yieldNumber(),
  yieldNumber(),
  yieldNumber(),
  yieldNumber()
]).then(yoldNumbers => {
  randomNumberStorage.numbers = yoldNumbers
}).then(() => {
  console.log(randomNumberStorage.numbers) // результат, аналогичный предыдущему примеру
})