我在长数组上使用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))
将最终值添加到数组后,执行一些操作。在这种情况下,console.log是完整的阵列。
答案 0 :(得分:2)
您要传递给map的函数没有return语句,因此result
是undefined
的数组。结果,Promise.all没有什么可以等待的。
此外,无需手动将其推入阵列。一旦我们添加了return语句,您将获得一个Promise数组,Promise.all将解析为一个包含您当前要推送的所有内容的数组。
所以尝试一下:
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));