История изменений
Исправление 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) // результат, аналогичный предыдущему примеру
})