Помогите решить задачу на JS про map, class, Promise
Создайте класс AsyncArray . Экземрляры AsyncArray должны обладать всеми возможностями обычного Array. Дополнительно экземпляры AsyncArray должны иметь следующие методы:
serialMap - По сути работает как обычный map, только преобразование элемента массива происходит асинхронно (т.е. функция преобразования для каждого элемента возвращает Promise). Следовательно, и сам метод serialMap тоже возвращает Promise. Следующий элемент массива обрабатывается только после предыдущего.
Пример использования:
import { AsyncArray } from './index.js';
const array = new AsyncArray(1, 2, 3, 4, 5);
array
.serialMap((el, index, arr) => {
// преобрвзовываем элемент массива с помощью функции, которая возвращает Promise
return asyncAction(el);
})
.then(newArray => {
// newArray - массив с результатами всех преобразований
});
parallelMap - Аналог метода serialMap, только элементы массива могут обрабатываться параллельно.
Пример использования:
import { AsyncArray } from './index.js';
const array = new AsyncArray(1, 2, 3, 4, 5);
введите сюда код
array
.parallelMap((el, index, arr) => {
// преобрвзовываем элемент массива с помощью функции, которая возвращает Promise
return asyncAction(el);
})
.then(newArray => {
// newArray - массив с результатами всех преобразований
});
Ответы (1 шт):
Автор решения: Трипольский Пётр
→ Ссылка
StackOverflow - сообщество для технических вопросов
Если вы не будете собирать свои решения хотя бы по кусочкам чужого кода, вам будет сложно стать программистом
class AsyncArray extends Array {
constructor(...args) {
super(...args)
}
serialMap = async (fn) => {
let result = [];
for (const item of this) {
result.push(await fn(item))
}
return result;
}
parallelMap = async (fn) => {
return await Promise.all(this.map(async (item) => await fn(item)))
}
}
const array = new AsyncArray(1, 2, 3, 4, 5);
array.serialMap((el) => el + 1).then(console.log) // [2, 3, 4, 5, 6]
array.parallelMap((el) => el + 1).then(console.log) // [2, 3, 4, 5, 6]