#javascript #ecmascript-6 #es6-promise
#javascript #ecmascript-6 #es6-обещание
Вопрос:
Я использую map () для длинного массива и использую выборку для каждого значения. Для завершения потребуется много секунд. Я хотел бы знать, когда завершится окончательное нажатие, и использовать данные в массиве.
Я пробовал Promise, Promise.all, Async / Await, но, возможно, пропустил что-то очевидное. Я создал этот пример кода, чтобы более просто проиллюстрировать проблему.
const arr = new Array(100).fill("todos")
const arrPush = []
const result = arr.map(data => {
fetch(`https://jsonplaceholder.typicode.com/${data}`)
.then(res => res.json())
.then(res => arrPush.push(res))
})
Promise.all(result).then(() => console.log(arrPush))
Когда окончательное значение будет добавлено в массив, сделайте что-нибудь. В данном случае консоль.запишите весь массив.
Ответ №1:
Функция, которую вы передаете map, не имеет оператора return, поэтому result
представляет собой массив undefined
s. В результате Promise.all нечего ждать.
Кроме того, нет необходимости вручную вставлять в массив. Как только мы добавим оператор return, у вас будет массив обещаний и Promise.все будет преобразовано в массив со всеми материалами, которые вы в данный момент пытаетесь передать.
Итак, попробуйте это:
const arr = new Array(100).fill("todos")
const promises = arr.map(data => {
return fetch(`https://jsonplaceholder.typicode.com/${data}`)
.then(res => res.json());
});
Promise.all(promises)
.then(arrayOfResults => console.log(arrayOfResults));
Комментарии:
1. огромное спасибо! Я знаю, что с этого я начал, но пошел по неверному пути. Я думаю, я предположил, что возврат был ответом, если это имеет смысл.